Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

Получить букву подкл/откл флешки.   Найти похожие ветки 

 
Kolan ©   (2008-03-31 15:21) [0]

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

Как я делаю.
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 ©   (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 которое и укажет тебе &laquo;номера&raquo;
> букв изменившихся устройсв.

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

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


 
Kolan ©   (2008-03-31 17:09) [5]

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



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.038 c
4-1207309857
DiamondShark
2008-04-04 15:50
2009.03.29
Как узнать, что приложение запущено в терминальной сессии?


15-1233084580
Eraser
2009-01-27 22:29
2009.03.29
Скрыть строку от отладчика и хекс-редактора


11-1189525265
matroskin66
2007-09-11 19:41
2009.03.29
корректное завершение


2-1233552018
Тимоха
2009-02-02 08:20
2009.03.29
Организация работы потоков


4-1207145739
kolj
2008-04-02 18:15
2009.03.29
Tapi -> lineanswer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский