<...zurück>

Geräteseriennummer lesen

Manchmal braucht man eben mal die Seriennummer. Der hier vorgestellte Beispielcode führt die im \windows-Verzeichnis stehende Datei "CreateAssetFile.exe" aus. Diese erzeugt im selben Verzeichnis eine Datei namens "cpqAssetData.dat". In dieser Datei findet sich ab dem 976. Byte die Seriennummer des Gerätes. Also nur noch auslesen.... fertig. Ich habe bewußt auf das Filecontrol verzichtet, mit den API-Funktionen gehts etwas schneller unf vor allem ohne Registrierung eines separaten Steuerelementes. Wer's mag, kann die Datei natürlich auch mittels FileControl lesen.

Deklarationsteil:

Public Const GENERIC_READ = &H80000000
Public Const FILE_SHARE_READ = &H1
Public Const OPEN_ALWAYS = 4
Public Const FILE_ATTRIBUTE_NORMAL = &H80

Public Declare Function CreateProcess Lib "coredll.dll" Alias "CreateProcessW" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, ByVal lpStartupInfo As Long, ByVal lpProcessInformation As Long) As Long

Public Declare Function CreateFile Lib "Coredll" Alias "CreateFileW" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As String, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

Public Declare Function ReadFile Lib "Coredll" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToRead As Long, ByVal lpNumberOfBytesRead As String, ByVal lpOverlapped As Long) As Long

Public Declare Function CloseHandle Lib "Coredll" (ByVal hObject As Long) As Long

.und hier die Beispielfunktion die, wenn alles glatt läuft, die Seriennummer anzeigt:

Private Sub Command1_Click()
    Dim strAssetData As String
    Dim lngBytesRead As Long
    Dim hFile As Long

    strAssetData = Space(976 + 64)

    CreateProcess "\windows\CreateAssetFile.exe", "", 0, 0, 0, 0, 0, 0, 0, 0
    hFile = CreateFile("\Windows\cpqAssetData.dat", GENERIC_READ, FILE_SHARE_READ, _
    "",OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)

    ReadFile hFile, strAssetData, 64 + 976, lngBytesRead, 0
    CloseHandle hFile

    MsgBox Mid(strAssetData, 489, 64)

End Sub

Ein weinig Vorsicht ist dennoch bei dieser Lösung geboten; die Datei CreateAssetFile.exe im Windows-Verzeichnis hat der Geräte- OEM zu verantworten (deshalb existiert sie schlicht und ergreifend nicht im Emulator.) Will hoffen, daß sich alle OEM's an diese Datei und das Format der Daten halten, sonst wird's wohl nicht funktionieren......

<...zurück>