Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.11.2009, 08:27
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка Как определть букву USB флэшки

Привет, более или менее разобрался с определением вставки и извлечения флэшки (и тд), но возник другой вопрос, как вытащить букву диска, зная HDEVINFO, DeviceNumber, TSPDevInfoData или TSPDeviceInterfaceData ? Знаю что несложно, но запутался. Вот часть кода где необходимо определить букву диска:

Код:
procedure TForm1.UpdateDriveListBox;
var
  DrivePnPHandle: HDEVINFO;
  DeviceNumber:DWORD;
  DevData: TSPDevInfoData;
  DeviceInterfaceData: TSPDeviceInterfaceData;
  RES:BOOL;
  //
  sSerial: String;
  Buffer:array[0..4096-1] of Char;
  //
  S{, SymbolicName}: string;
{   I: Integer;
  Inst: DEVINST;
  sVendor,sVendorSpec,sProduct,sRevision: String;}
begin
  DrivesListBox.Clear;
    // update the list of drive mount points
//  FillInRemovableDriveMountPoints(DriveMountPoints);
  DrivePnPHandle := SetupDiGetClassDevs(@GUID_DEVCLASS_DISKDRIVE, nil, 0, DIGCF_PRESENT);//or DIGCF_PROFILE

  if DrivePnPHandle = INVALID_HANDLE_VALUE then  Exit;

  DeviceNumber := 0;
  repeat
  // DevData:=GetMemory(sizeof(TSPDevInfoData));

   DeviceInterfaceData.cbSize := SizeOf(TSPDeviceInterfaceData);
   DevData.cbSize := SizeOf(TSPDevInfoData);
   RES := SetupDiEnumDeviceInfo(DrivePnPHandle, DeviceNumber, DevData);
   if (RES) then
    begin
//    if IsUSBDevice(DevData.DevInst) then//Нельзя, иначе не извлечь
                  CM_Get_Parent(DevData.DevInst,DevData.DevInst,0);
                  CM_Get_Device_ID(DevData.DevInst,Buffer,SizeOf(Buffer),0);
                  sSerial:=ExtractFileName(Buffer);
                  if Pos('&',sSerial)>0 then //sSerial:='';
                  sSerial := IntToStr(GetVolumeSerialNumber(S));
     //Получить букву диска, а не тока описание
     DrivesListBox.Items.Add(S + ' ' + GetDeviceName(DrivePnPHandle, DevData) + ' [' + sSerial + ']');
     Inc(DeviceNumber);
    end;
  until not RES;

  //
{  S := 'A:';
  SymbolicName := '';
  for I := 0 to DriveMountPoints.Count - 1 do
  begin
    S[1] := Char(DriveMountPoints.Objects[i]);
    GetDriveInstanceID(DriveMountPoints[i], Inst);
//    SymbolicName := GetSymbolicName(Inst);
GetInquiryData(S[1], sVendor,sVendorSpec,sProduct,sRevision);}
//    DrivesListBox.Items.AddObject(S + ' [' + IntToStr(GetVolumeSerialNumber(S)) +' - '+ sVendor+sVendorSpec+sProduct+sRevision {+ ExtractSerialNumber(SymbolicName)} + ']', TObject(Inst));
{  end;}
  //

  SetupDiDestroyDeviceInfoList(DrivePnPHandle);
  DrivesListBox.Enabled:=true;
end;
Ответить с цитированием
  #2  
Старый 13.12.2009, 06:03
hiho hiho вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 1
Репутация: 10
По умолчанию

Когда-то занимался похожим вопросом. Вставку/извлечение флешки обрабатывал отловом сообщения WM_DEVICECHANGE.
При запуске программы находил список букв флешек и заносил в переменную. При определении вставки/извлечения нового накопителя получал новый список и сохранял его в другую переменную. Потом с помощью простого цикла и функции POS определял отличие двух стринговых строк. Отличались они всего на одну букву - букву вставленной/извлеченной флешки.

P.S. Код написать не смог, ибо с телефон не поддерживает английский.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter