USB DETECTION

Signaler
Messages postés
1
Date d'inscription
mardi 30 juin 2009
Statut
Membre
Dernière intervention
9 juillet 2009
-
Messages postés
1
Date d'inscription
lundi 27 juillet 2009
Statut
Membre
Dernière intervention
24 août 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50271-usb-detection

Messages postés
1
Date d'inscription
lundi 27 juillet 2009
Statut
Membre
Dernière intervention
24 août 2009

#include<windows.h>
#include<stdio.h>
#include<dbt.h>
#define mbox(tst) MessageBox(0,tst,"USB detection",16)
HINSTANCE hinst=0;
DWORD init=0;
LRESULT CALLBACK WinProc(HWND,UINT uMsg,WPARAM,LPARAM);

char wclass[]="MyClass_Ex";
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE phInstance,LPSTR cmd,int shcmd)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wndClass;
hinst=hInstance;
wndClass.cbSize=sizeof(WNDCLASSEX);
wndClass.style=0;
wndClass.lpfnWndProc=WinProc;
wndClass.cbClsExtra=wndClass.cbWndExtra=0;
wndClass.hInstance=hInstance;
wndClass.hIcon=LoadIcon (NULL, IDI_APPLICATION);
wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground=(HBRUSH) COLOR_BACKGROUND;
wndClass.lpszMenuName=0;
wndClass.lpszClassName=wclass;
wndClass.hIconSm=LoadIcon (NULL, IDI_APPLICATION);
FreeConsole();
if(!RegisterClassEx(&wndClass))
{
MessageBoxA(0,"class","l",16);
return 0;
}
hwnd=CreateWindowExA(0,wclass,"USB Detection [Said Bouchkaren Maroc]",WS_OVERLAPPEDWINDOW,0,0,450,400,0,NULL,hInstance,NULL);
ShowWindow(hwnd,shcmd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_DEVICECHANGE:
{
char ts[20];
DWORD drv=0;
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
PDEV_BROADCAST_VOLUME lpdbv;
int m=0;
DWORD hlp;
ts[0]=0;
switch(wParam)
{
case DBT_DEVICEARRIVAL:
drv=GetLogicalDrives();
for(m=0;m<29&&(drv>>m)!=(init>>m);m++);
lpdbv=(PDEV_BROADCAST_VOLUME)lpdb;
sprintf (ts, "Drive %c:\\ was inserted\n",m-1+'A');
mbox(ts);
init=drv;
break;
case DBT_DEVICEREMOVECOMPLETE:
drv=GetLogicalDrives();
for(m=0;m<29&&(drv>>m)!=(init>>m);m++);
lpdbv=(PDEV_BROADCAST_VOLUME)lpdb;
sprintf (ts, "Drive %c:\\ was removed\n",m-1+'A');
mbox(ts);
init=drv;
break;
}

}
break;

default : return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
return 0;
}
Messages postés
240
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
22 mars 2009

sylvain908 << franchement ce genre de commentaire ne fait pas avancer du tout.

abandonware << la méthode n'est franchement pas efficace, la manière dont tu as codé l'application serait plus efficace en vb.

En C :
Le plus rapide (à mon avis) est d'utiliser une énumération des lecteurs, lors de la modification de la liste des lecteurs, tu vérifies le type du lecteur ajouté.
Maintenant il existe surement une autre méthode mais je trouve celle ci efficace, je l'avais utilisé pour un leecher USB (copie du contenu d'une clé usb dés son insertion (il existe de nombreuses sources)
la mienne: http://omni.a.free.fr/app.html (USBLEECH)

bon codage :)