Dectecter un Disque dur USB et executer un fichier

Bonjour à tous,
Je suis néophyte en programmation et je travaille sous windows XP.
Dans le cadre de mon travail, je voudrais que lorsque je branche physiquement mon disque dur externe USB a mon PC, que windows execute automatiquement un fichier.
Avez-vous des idée?

Merci!

autorun.inf peut-être? (ceci dit je suis pas spécialiste de la question)

… en effet, c’est peux etre possible. Je peux executer un fichier cavec ce dernier?

A condition que l’execution automatique soit activée.

Regarde l’autorun.inf à la racine d’un cd avec un programme/jeu dessus pour voir la syntaxe

C’est presque bon, j’arrive a faire fonctionner le fichier “autorun.inf”, mais ce n’est pas encore tout a fait automatique, car windows me demande ce que je veux executer. N’est-il pas possible de forcer Windows a executer mon fichier, au lieu de media player, ou le lecteur d’images?

Je viens de voir que dans les propriéte d’éxecution automatique, il y a une catégorie contenu mixte dans lequel apparait des programmes tels que NERO, ou ROXIO, j’en deduis qu’il est possible de rajouter sois meme des programmes. Mais comment?

C’est un truc par défaut qu’il te lance…

Windows scanne les types de fichiers présents sur le média, s’il trouve des jpg, il te propose de les ouvrir avec un visualisateur d’images, s’il trouve des avi il te propose mediaplayer et ainsi de suite…

Pour ajouter ton truc il faut associer ton programme à une extension présente sur le disque. Il devrait il y avoir d’autre possibilités mais il te faudra manipuler la base de registre surement…

Rien de plus simple :


// Code par KarLKoX
#include <windows.h>

#ifndef WM_DEVICECHANGE
#define WM_DEVICECHANGE           0x219
#endif

#ifndef DBT_DEVICEARRIVAL
#define DBT_DEVICEARRIVAL         0x8000
#endif

#ifndef DBT_DEVICEREMOVECOMPLETE
#define DBT_DEVICEREMOVECOMPLETE  0x8004
#endif

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        // Bonus :)
        case WM_DEVICECHANGE:
             if (wParam == DBT_DEVICEARRIVAL)
                MessageBox(hwnd, "Une clé USB vient d'être détectée.", "Info", MB_OK);
             else if (wParam == DBT_DEVICEREMOVECOMPLETE) 
                MessageBox(hwnd, "Une clé USB vient d'être déconnectée.", "Info", MB_OK);
                
             break;
        /* Le fameux message envoyé à tous les programmes par windows;)     
           case WM_QUERYENDSESSION: <-- si tu souhaites que l'utilisateur choisis de ferme la sessions ou pas
           http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shutdown/base/wm_queryendsession.asp
        */   
        case WM_ENDSESSION:
            MessageBox(hwnd, "Windows va se fermer.", "Info", MB_OK);
            break;
                  
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

Ca détecte l’insertion d’un périphérique amovible incluant les disques dur externes en USB, il ne te reste plus qu’à parser le contenue de ce disque via FindFirstFile/FindNextFile à la recherche des fichiers qui t’interesse.

Merci beaucoup, mais je les mets ou toutes ces lignes de commandes? (je veux dire dans quel fichier et à quel endoit)
Je suis désolé vraiment nouveau en prog :S