Delphi Определение серийного номера съемного носителя

Lomanu4

Команда форума
Администратор
Ofline
Определить серийный номер флешки с помощью Delphi довольно просто. Основная функция для определения SerialNumber является GetVolumeInformation, которая включает себя несколько параметров.
GetVolumeInformation – это API функция принимающая ряд параметров, один из которых является указатель на переменную, которая будет хранить серийный номерVolumeSerialNumber. Ознакомиться со всеми тонкостями работы и параметрами функции GetVolumeInformation можно в MSDN.
?
Код:
function GetHardDiskSerial(const DriveLetter: Char): string;
var
  NotUsed:     DWORD;
  VolumeFlags: DWORD;
  VolumeInfo:  array[0..MAX_PATH] of Char;
  VolumeSerialNumber: DWORD;
begin
  GetVolumeInformation(PChar(DriveLetter + ':\'),
    nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed,
    VolumeFlags, nil, 0);
  Result := Format('%8.8X', [VolumeSerialNumber])
end;
Для того чтобы узнать, является ли устройство съемным носителем используется следующий алгоритм:
1. Узнаем все логические устройства с помощью функции GetLogicalDrives, которая возвращает ряд битов, каждый из них является последовательным номером диска. К примеру (0 – диск А, 1- диск B, 2 – диск C и т.д).


2. Узнаем, является логический диск съемным (флешка или дискета), для этого используется цикл, и операция сравнения типа устройства. Узнать тип устройства можно благодаря API-функции GetDriveType() -в качестве параметра указывается указатель на том устройства. После чего функция возвращает тип устройства, возвращаемый результат необходимо сравнивать с DRIVE_removable. Таким образом, можно определить являются ли устройств со съемными носителями или нет.
В MSDN можно встретить другой вариант для распознавания usb-flash устройства – это использование функции SetupDiGetDeviceRegistryProperty и указать SPDRP_REMOVAL_POLICY.
В качестве примера можно использовать функцию, которая выводит список съемных
Код:
function issetRemovableDrive():TStringList;
var
Root:String;
i:Integer;
w:Cardinal;
RemovableDriveList:TStringList;
begin
RemovableDriveList := TStringList.Create;
w := GetLogicalDrives;
Root := '#:\';
for i := 0 to 25 do
begin
Root[1] := Char(Ord('A') + i);
if (W and (1 shl i)) > 0 then
begin
if GetDriveType(Pchar(Root)) = DRIVE_removable then
begin
RemovableDriveList.Add(Root);
end;
end;
end;
Result := RemovableDriveList;
end;
Перечень съемных носителей будет внесен в объект TStringList.
 
Может есть функции для определения именно этого
(0 – диск А, 1- диск B, 2 – диск C и т.д ). Чтобы по букве можно было определить номер жёсткого диска и разделов диска по букве ?
 
Последнее редактирование:
это уже будет не диски а разделы
 
Назад
Сверху Снизу