-
Здравствуйте.
ВОзможноесть более нормальный способ получить сабж, а я его незнаю
Как я делаю.
1. Получаю WM_DEVICECHANGE.
2. Использую GetLogicalDrives
И сравниваю что было до и что сейчас. Таким образом нахожу букву.
function TUSBDrivesInspector.JustConnectedDeviceLetter(
AOldDriveMask: DWORD): Char;
const
MAX_DRIVES = 26;
var
TempDeviceMask: DWORD;
I: Integer;
Let: array[0㐎] 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()
-
В смысле Chr()?
-
> [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." -
> у них есть поле dbcv_unitmask которое и укажет тебе «номера»
> букв изменившихся устройсв.
Блин а я подумул что dbcv_unitmask это тоже самое что и результат GetLogicalDrives.
Еще подумал зачем это надо
Благодарствую :), пойду попробую. -
Отлично :) Работает :)
Благодарю.