- Регистрация
- 1 Мар 2015
- Сообщения
- 1,481
- Баллы
- 155
Определить серийный номер флешки с помощью Delphi довольно просто. Основная функция для определения SerialNumber является GetVolumeInformation, которая включает себя несколько параметров.
GetVolumeInformation – это API функция принимающая ряд параметров, один из которых является указатель на переменную, которая будет хранить серийный номерVolumeSerialNumber. Ознакомиться со всеми тонкостями работы и параметрами функции GetVolumeInformation можно в .
Для того чтобы узнать, является ли устройство съемным носителем используется следующий алгоритм:
1. Узнаем все логические устройства с помощью функции GetLogicalDrives, которая возвращает ряд битов, каждый из них является последовательным номером диска. К примеру (0 – диск А, 1- диск B, 2 – диск C и т.д).
2. Узнаем, является логический диск съемным (флешка или дискета), для этого используется цикл, и операция сравнения типа устройства. Узнать тип устройства можно благодаря API-функции GetDriveType() -в качестве параметра указывается указатель на том устройства. После чего функция возвращает тип устройства, возвращаемый результат необходимо сравнивать с DRIVE_removable. Таким образом, можно определить являются ли устройств со съемными носителями или нет.
В MSDN можно встретить другой вариант для распознавания usb-flash устройства – это использование функции и указать SPDRP_REMOVAL_POLICY.
В качестве примера можно использовать функцию, которая выводит список съемных
Перечень съемных носителей будет внесен в объект TStringList.
GetVolumeInformation – это API функция принимающая ряд параметров, один из которых является указатель на переменную, которая будет хранить серийный номерVolumeSerialNumber. Ознакомиться со всеми тонкостями работы и параметрами функции GetVolumeInformation можно в .
Код:
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 устройства – это использование функции и указать 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;