• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

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

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
Определить серийный номер флешки с помощью Delphi довольно просто. Основная функция для определения SerialNumber является GetVolumeInformation, которая включает себя несколько параметров.
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;
Перечень съемных носителей будет внесен в объект TStringList.
 
Mazahaka_lab Оффлайн

Mazahaka_lab

Принятый Кодер
Регистрация
25 Янв 2017
Сообщения
49
Баллы
50
Может есть функции для определения именно этого
(0 – диск А, 1- диск B, 2 – диск C и т.д ). Чтобы по букве можно было определить номер жёсткого диска и разделов диска по букве ?
 
Последнее редактирование:
Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
Вверх Снизу