Конференция "WinAPI" » Получить букву подкл/откл флешки.
 
  • Kolan © (31.03.08 15:21) [0]
    Здравствуйте.
     ВОзможноесть более нормальный способ получить сабж, а я его незнаю…

    Как я делаю.
    1. Получаю WM_DEVICECHANGE.
    2. Использую GetLogicalDrives
    И сравниваю что было до и что сейчас. Таким образом нахожу букву.

    function TUSBDrivesInspector.JustConnectedDeviceLetter(
     AOldDriveMask: DWORD): Char;
    const
     MAX_DRIVES = 26;
    var
     TempDeviceMask: DWORD;
     I: Integer;
     Let: array[0&#13326] of Boolean absolute TempDeviceMask;
    begin
     TempDeviceMask := GetLogicalDrives;
     for I := 0 to MAX_DRIVES — 1 do
     begin
       {* (DeviceMask and (1 shl I)) <> 0 detects if drive letter exists.}
       if ((TempDeviceMask and (1 shl I)) <> 0) {Такой диск есть в новом наборе.}
         and (not ((AOldDriveMask and (1 shl I)) <> 0)) {И его нет в старом.}
       then
       begin
         Result := 'A';
         Inc(Result, I);
         {if GetDriveType(PChar(Result+':\')) = DRIVE_REMOVABLE then
         begin
           Exit;
         end;}

       end;
     end;
    end;



    Нельзя ли в сообщении получить саму букву?
  • Cj © (31.03.08 15:30) [1]
    Chr()
  • Kolan © (31.03.08 15:35) [2]
    В смысле Chr()?
  • Riply © (31.03.08 16:26) [3]
    > [0] Kolan ©   (31.03.08 15:21)
    > ВОзможноесть более нормальный способ получить сабж, а я его незнаю…

    > Как я делаю.
    > 1. Получаю WM_DEVICECHANGE.
    > 2. Использую GetLogicalDrives
    > И сравниваю что было до и что сейчас. Таким образом нахожу букву.

    > Нельзя ли в сообщении получить саму букву?

    Можно.

    "lParam
    Pointer to a structure that contains event-specific data. Its format depends on the value of the wParam parameter.
    For more information, refer to the documentation for each event."

    Например, для Event`ов DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE
    смотришь структуры: DEV_BROADCAST_HDR, DEV_BROADCAST_VOLUME
    у них есть поле dbcv_unitmask которое и укажет тебе "номера" букв изменившихся устройсв.
    "Logical unit mask identifying one or more logical units. Each bit in the mask corresponds to one logical drive.
    Bit 0 represents drive A, bit 1 represents drive B, and so on."
  • Kolan © (31.03.08 16:28) [4]
    > у них есть поле dbcv_unitmask которое и укажет тебе «номера»
    > букв изменившихся устройсв.

    Блин… а я подумул что dbcv_unitmask это тоже самое что и результат GetLogicalDrives.
    Еще подумал зачем это надо…

    Благодарствую :), пойду попробую.
  • Kolan © (31.03.08 17:09) [5]
    Отлично :) Работает :)
    Благодарю.
 
Конференция "WinAPI" » Получить букву подкл/откл флешки.
Есть новые Нет новых   [134433   +21][b:0][p:0.001]