Сейчас на форуме: (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› Как поймать момент подключения флешки? |
Посл.ответ | Сообщение |
|
Создано: 18 октября 2007 21:26 · Личное сообщение · #1 |
|
Создано: 18 октября 2007 21:32 · Поправил: HandMill · Личное сообщение · #2 Метод конечно не кошерный, но рабочий =) DWORD drive_mask = GetLogicalDrives(); while (drive_mask) { // проверяем присутствует ли диск (выставлен ли соотв. бит) if (drive_mask & 1) // если присутствует то выводим на печать имя и тип диска { if (GetDriveType(drive)==DRIVE_REMOVABLE) { if (lstrcmp(drive,"a:")) { if (lstrcmp(drive,"A:")) { Чё-то делаем если это флешка } } } } // увеличиваем букву диска и смещаем маску. ++drive[0]; drive_mask >>= 1; } Это всё пихаем в бесконечной цикл и ловим момент так сказать =) ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 19 октября 2007 01:48 · Поправил: ssx · Личное сообщение · #3 |
|
Создано: 19 октября 2007 01:53 · Личное сообщение · #4 Поставь глобальный хук hhook = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,(HINSTANCE)hm,0); Вот отрывок из моего исходника Flash Guard Pro (самого первого): LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam) {if (nCode < 0) return CallNextHookEx(hhook, nCode,wParam, lParam); MSG *msg= (MSG*)lParam; if (msg->message==WM_DEVICECHANGE) {if (!flag) {UnhookWindowsHookEx(hhook); ResultSWL=(WNDPROC)SetWindowLong(msg->hwnd,GWL_WNDPROC,(LONG)WinPro c); flag=true; return 0; } }; return CallNextHookEx(hhook, nCode, wParam, lParam); } LRESULT CALLBACK WinProc(HWND hwnd,unsigned int uMsg, WPARAM wParam, LPARAM lParam) {char Serial[16]; //sprintf(Serial,"%d",wParam); //FlashLed(2,true); //MessageBox(hwnd,Serial,"", MB_OK); if (wParam==DBT_DEVICEARRIVAL) {DEV_BROADCAST_HDR *MyDevB=(DEV_BROADCAST_HDR*)lParam; if (MyDevB->dbch_devicetype==DBT_DEVTYP_VOLUME) {DEV_BROADCAST_VOLUME *MyDevV=(DEV_BROADCAST_VOLUME*)lParam; if (MyDevV->dbcv_flags!=DBTF_MEDIA && MyDevV->dbcv_flags!=DBTF_NET) {char DriveName[4]; unsigned long DriveSerial; DWORD dwFileSystemFlags = 0; DriveName[0]=FirstDriveFromMask(MyDevV->dbcv_unitmask); DriveName[1] = ':'; DriveName[2] = '\'; DriveName[3] = 0; unsigned int DriveTyp; DriveTyp=GetDriveType(DriveName); char DriveType[1]; sprintf(DriveType,"%d",DriveTyp); //MessageBox(hwnd,DriveName,DriveType, MB_OK); if (DriveTyp==2) {SetWindowLong(hwnd,GWL_WNDPROC,(long)ResultSWL); GetVolumeInformation(DriveName, NULL, 0, &DriveSerial, NULL, &dwFileSystemFlags, NULL, 0); char DriveType[1]; sprintf(Serial,"%d",DriveSerial); sprintf(DriveType,"%d",DriveTyp); // MessageBox(hwnd,Serial,DriveName, MB_OK); //PostMessage (hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2); //MessageBox(NULL,"Использование на данном ПК сменных носителей ограничено!","Извлеките устройство", MB_OK | MB_SYSTEMMODAL | MB_ICONEXCLAMATION ); } } } return 0; } return CallWindowProcA(ResultSWL,hwnd, uMsg, wParam, lParam);} Тут еще и по серийнику проверяется, разберешься ----- продавец резиновых утёнков ![]() |
|
Создано: 19 октября 2007 06:13 · Личное сообщение · #5 |
![]() |
eXeL@B —› Программирование —› Как поймать момент подключения флешки? |