Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить букву подкл/откл флешки.


Kolan ©   (2008-03-31 15:21:00) 

Здравствуйте.
 ВОзможноесть более нормальный способ получить сабж, а я его незнаю…

Как я делаю.
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;


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


Kolan   (2008-03-31 17:09:00) [1]

Отлично :) Работает :)
Благодарю.


Kolan   (2008-03-31 16:28:00) [2]

> у них есть поле dbcv_unitmask которое и укажет тебе «номера»
> букв изменившихся устройсв.

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

Благодарствую :), пойду попробую.


Riply   (2008-03-31 16:26:00) [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 15:35:00) [4]

В смысле Chr()?


Cj   (2008-03-31 15:30:00) [5]

Chr()


Наверх

Титульная страница Поиск, карта сайта Написать письмо