Форум: "WinAPI";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизПолучить букву подкл/откл флешки. Найти похожие ветки
← →
Kolan © (2008-03-31 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㐎] 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 © (2008-03-31 15:30) [1]Chr()
← →
Kolan © (2008-03-31 15:35) [2]В смысле Chr()?
← →
Riply © (2008-03-31 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 © (2008-03-31 16:28) [4]> у них есть поле dbcv_unitmask которое и укажет тебе «номера»
> букв изменившихся устройсв.
Блин… а я подумул что dbcv_unitmask это тоже самое что и результат GetLogicalDrives.
Еще подумал зачем это надо…
Благодарствую :), пойду попробую.
← →
Kolan © (2008-03-31 17:09) [5]Отлично :) Работает :)
Благодарю.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.049 c