Как узнать что подключили флешку к компу? Какие для это АРІ надо использовать и как...если можна пример...где при подключение сменного носителя будет выводиться сообщение что подключен сменный носитель с буквой его диска.
Код (Text): #include <dbt.h> ... // В обработчике оконных сообщений: case WM_DEVICECHANGE: if (wParam == DBT_DEVICEARRIVAL) OnDeviceArrival( (DEV_BROADCAST_VOLUME*)lParam ); else if (wParam == DBT_DEVICEREMOVECOMPLETE) OnDeviceRemoval( (DEV_BROADCAST_VOLUME*)lParam ); break; // void OnDeviceArrival(DEV_BROADCAST_VOLUME* di) { if (di->dbcv_devicetype != DBT_DEVTYP_VOLUME || di->dbcv_flags & DBTF_NET) return; uint NewVolumes = di->dbcv_unitmask; for (uint i = 1, DriveLetter = 0; i; i <<= 1, ++DriveLetter) if (NewVolumes & i) ShowDriveLetter('A' + DriveLetter); }
Какие автораны ...нет конечно!!! можна как помоему и проще , раз время-от-времени проверять список дисков через GetLogicalDriveStrings, а потом через GetDriveType и определять тип диска прога ведет учет какие есть файли на флешке... и нет ли среди них подозрительных файлов, например автораны , и если такие есть что-то делает(что делает еще не придумал, но что-то точно делает)))
А почему "не используя окон"? Если не хочется рисовать гуй - создай скрытое окно, или вообще message-only.
интересно-интересно....а это что? и как оно работает?? и для чево нужно??? поподробнее про message-only можна????
Можно. Написано, что один может получать устройство-извещения в своём служба-контроль-описателе, если позовёт RegisterDeviceNotification со служба контроль описателем в качестве первого параметра. Так что одному лучше использовать окно. Нельзя. Message-only не получает broadcast messages. WM_DEVICECHANGE ему не придёт. Кстати, несколько часов назад kero уточнил насчёт того, что является message-only window. Код (Text): // Message-only - wrong. // hwnd = CreateWindowEx(0, L"Message", NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, hInstance, NULL); // Not message-only (despite "Message" window class) - okay. hwnd = CreateWindowEx(0, L"Message", NULL, 0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL); // Don't save result - just call DefWindowProc from WndProc. // Теперь один может обрабатывать WM_DEVICECHANGE в функции WndProc. SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)&WndProc);