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......