Идентификация CD-ROM через серийный номер - PullRequest
2 голосов
/ 27 февраля 2012

Меня интересует идентификация CD.

Мой вопрос:

Есть ли серийный номер, который можно получить программным способом?

Редактировать (разрешено):

  1. VB версия
  2. Delphi версия

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Попробуйте этот код в VB

Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Sub Form_Load()
    Dim Serial As Long
    'Get the volume information
    GetVolumeInformation "d:\", vbNullString, 255, Serial, 0, 0, vbNullString, 255

    MsgBox Hex(Serial)
End Sub 

Это должно послужить подтверждением вашей концепции. Вы можете адаптировать это к вашему языку выбора.

Взяты отсюда: Форумы VB

1 голос
/ 27 февраля 2012

Синтаксис Windows.GetVolumeInformation

  GetVolumeInformation(
    lpRootPathName: PChar; {the path to the root directory}
    lpVolumeNameBuffer: PChar; {the buffer receiving the volume name}
    nVolumeNameSize: DWORD; {the maximum size of the buffer}
    lpVolumeSerialNumber: PDWORD; {a pointer to the volume serial number}
    var lpMaximumComponentLength: DWORD; {maximum file component name}
    var lpFileSystemFlags: DWORD; {file system flags}
    lpFileSystemNameBuffer: PChar; {the buffer receiving the file system name}
    nFileSystemNameSize: DWORD {the maximum size of the file system name}
  ): BOOL; {returns TRUE or FALSE}

Порт Delphi (слегка адаптированный с поста Andrei G )

Фрагмент GetCDROMSerial:

  function GetCDROMSerial(AVolName: Char ) : DWord;
  var
   Dummy1, Dummy2 : DWord;
  begin
   GetVolumeInformation(
     PChar( AVolName+':' ),
     nil,
     0,
     @Result,
     Dummy1,
     Dummy2,
     nil,
     0
     );
  end;

Пример использования:

  ShowMessage(Format('%X', [GetCDROMSerial('F')]));
...