Как узнать что подключили флешку к компу?

Тема в разделе "WASM.BEGINNERS", создана пользователем XshStasX, 23 ноя 2008.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Как узнать что подключили флешку к компу?
    Какие для это АРІ надо использовать и как...если можна пример...где при подключение сменного носителя будет выводиться сообщение что подключен сменный носитель с буквой его диска.
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Код (Text):
    1. #include <dbt.h>
    2.  
    3. ...
    4. // В обработчике оконных сообщений:
    5. case WM_DEVICECHANGE:
    6.     if (wParam == DBT_DEVICEARRIVAL)
    7.         OnDeviceArrival( (DEV_BROADCAST_VOLUME*)lParam );
    8.     else if (wParam == DBT_DEVICEREMOVECOMPLETE)
    9.         OnDeviceRemoval( (DEV_BROADCAST_VOLUME*)lParam );
    10.     break;
    11.  
    12.  
    13. //
    14. void OnDeviceArrival(DEV_BROADCAST_VOLUME* di)
    15. {
    16.     if (di->dbcv_devicetype != DBT_DEVTYP_VOLUME  ||  di->dbcv_flags & DBTF_NET)
    17.         return;
    18.  
    19.     uint NewVolumes = di->dbcv_unitmask;
    20.  
    21.     for (uint i = 1, DriveLetter = 0; i; i <<= 1, ++DriveLetter)
    22.         if (NewVolumes & i)
    23.             ShowDriveLetter('A' + DriveLetter);
    24. }
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    А можна как то не используя окон это сделать?
     
  4. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    автораны на флешки записывать? :)
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Какие автораны ...нет конечно!!!
    можна как помоему и проще , раз время-от-времени проверять список дисков через GetLogicalDriveStrings, а потом через GetDriveType и определять тип диска:)
    прога ведет учет какие есть файли на флешке... и нет ли среди них подозрительных файлов, например автораны , и если такие есть что-то делает(что делает еще не придумал, но что-то точно делает)))
     
  6. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    подозрительные файлы? ну-ну :)
     
  7. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Ну так как можна ли еще как то узнать????
    а можна без наездов:) и подозрений добросовестных людей)
     
  8. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    А почему "не используя окон"? Если не хочется рисовать гуй - создай скрытое окно, или вообще message-only.
     
  9. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    интересно-интересно....а это что? и как оно работает?? и для чево нужно???
    поподробнее про message-only можна????
     
  10. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Можно. Написано, что один может получать устройство-извещения в своём служба-контроль-описателе, если позовёт RegisterDeviceNotification со служба контроль описателем в качестве первого параметра. Так что одному лучше использовать окно.

    Нельзя. Message-only не получает broadcast messages. WM_DEVICECHANGE ему не придёт.
    Кстати, несколько часов назад kero уточнил насчёт того, что является message-only window.

    Код (Text):
    1. // Message-only - wrong.
    2. // hwnd = CreateWindowEx(0, L"Message", NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, hInstance, NULL);
    3.  
    4. // Not message-only (despite "Message" window class) - okay.
    5.    hwnd = CreateWindowEx(0, L"Message", NULL, 0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
    6.  
    7.  
    8. // Don't save result - just call DefWindowProc from WndProc.
    9. // Теперь один может обрабатывать WM_DEVICECHANGE в функции WndProc.
    10. SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)&WndProc);