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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.04.2014, 18:47
nikcpp nikcpp вне форума
Прохожий
 
Регистрация: 13.04.2011
Сообщения: 22
Репутация: 10
Хорошо как узнать имя

Народ подскажите как узнать имя диска по названию устройства.
Например есть устройство 'WD My Passport 074A USB Device' как узнать имя физического диска
Ответить с цитированием
  #2  
Старый 30.04.2014, 03:38
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от nikcpp
Народ подскажите как узнать имя диска по названию устройства...
Интересно, что вы подразумеваете под именем диска, (и только-ли юэсби-диски) если его лейбл, то это всё в реестре лежит, а получить примерно так можно
Код:
function nd(ds: string): string;
var
 sl, sl1: TStrings;
 s: string;
 i, b: integer;
begin
 sl := TStringList.Create;
 sl1:= TStringList.Create;

 with TRegistry.Create do try
  RootKey:= HKEY_LOCAL_MACHINE;
  OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\USBSTOR');
  GetKeyNames(sl);

  for i := 0 to sl.Count-1 do
   begin
    CloseKey;
    OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\USBSTOR\' + sl[i]);
    GetKeyNames(sl1);

    for b := 0 to sl1.Count-1 do
     begin
      CloseKey;
      OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\USBSTOR\'+sl[i]+'\'+sl1[b]);
      if (ValueExists('ContainerID'))  and
         (ValueExists('FriendlyName')) and
         (ReadString('FriendlyName') = ds) then
         s:= (ReadString('FriendlyName')+'#'+ReadString('ContainerID'));
     end;
   end;

   CloseKey;
   OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\WpdBusEnumRoot\UMB');
   GetKeyNames(sl);

   for i := 0 to sl.Count-1 do
   begin
   CloseKey;
   OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\WpdBusEnumRoot\UMB\'+sl[i]);

   if (ValueExists('ContainerID'))  and
      (ValueExists('FriendlyName')) and
      (ReadString('ContainerID') = Copy(s, Pos('#', s)+1, Length(s))) then
       Result:= ReadString('FriendlyName');
   end;
  finally
   Free;
  end; {with}

sl.Free;
sl1.Free;
end;

// Использование:
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= nd('WD My Passport 074A USB Device');
end;
Поменяйте ветки местами, будет наоборот, по лейблу устройство искать

З.Ы. На машинке сейчас виртуальная W7, но вроде работает, мои 3 всунутых, и множество давно не втыкаемых в порт дисков обрабатываются, так что наверное нужно добавить проверку на подключение, но это уже не ходовая, мелочёвка
Ответить с цитированием
  #3  
Старый 30.04.2014, 07:45
nikcpp nikcpp вне форума
Прохожий
 
Регистрация: 13.04.2011
Сообщения: 22
Репутация: 10
По умолчанию

Скорей всего я не правильно выразился.

WD My Passport 074A USB Device соответствует диску H:\
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter