Delphi获取U盘唯一标识符判断程序运行位置

Delphi获取U盘唯一标识符并判断程序运行位置

在Delphi开发中,有时需要获取U盘的唯一标识符,例如判断程序是否运行在U盘上。可以使用以下步骤实现:

  1. 调用Windows API函数GetLogicalDrives获取系统中所有逻辑驱动器。
  2. 遍历每个逻辑驱动器,使用GetDriveType函数判断驱动器类型是否为DRIVE_REMOVABLE(可移动磁盘)。
  3. 如果是可移动磁盘,则使用GetVolumeInformation函数获取卷信息,包括卷序列号。
  4. 将获取到的卷序列号转换为字符串,即为U盘的唯一标识符。

判断程序是否在U盘运行:

  1. 获取程序当前运行路径,可以使用Application.ExecutablePathParamStr(0)
  2. 比较程序路径与获取到的U盘唯一标识符,如果包含则表示程序运行在U盘上。

代码示例:

function IsRunningFromUSB: Boolean;
var
  DriveLetter: Char;
  DriveType: UINT;
  VolumeSerialNumber: DWORD;
  VolumeNameBuffer: array[0..255] of Char;
  FileSystemFlags: DWORD;
  FileSystemNameBuffer: array[0..255] of Char;
begin
  // 遍历所有逻辑驱动器
  for DriveLetter := 'A' to 'Z' do
  begin
    DriveType := GetDriveType(PChar(DriveLetter + ':'));
    if DriveType = DRIVE_REMOVABLE then
    begin
      // 获取卷信息
      if GetVolumeInformation(
        PChar(DriveLetter + ':'),
        VolumeNameBuffer,
        SizeOf(VolumeNameBuffer),
        @VolumeSerialNumber,
        nil,
        @FileSystemFlags,
        FileSystemNameBuffer,
        SizeOf(FileSystemNameBuffer)
      ) then
      begin
        // 判断程序路径是否包含U盘唯一标识符
        if Pos(IntToHex(VolumeSerialNumber, 8), Application.ExecutablePath) > 0 then
        begin
          Result := True;
          Exit;
        end;
      end;
    end;
  end;
  Result := False;
end;

注意:

  • 以上代码仅供参考,实际使用时需要根据具体情况进行调整。
  • 获取到的U盘唯一标识符可能因系统或U盘的不同而有所差异。
zip 文件大小:217.61KB