Kapitel 13: Programmschnittstellen
Den Windows-Lizenznehmer ermitteln
Möchten Sie den Lizenznehmer von Windows ermitteln? Kein Problem, Sie finden zwar keine API-Funk-
tion dafür, aber die Information befindet sich in der Registrierdatenbank und ist damit schnell ausgelesen.
Einen Unterschied gilt es jedoch zu berücksichtigen: Windows 95/98/ME und Windows 2000/XP legen die
Werte in unterschiedlichen Verzeichnissen ab.
Oberfläche
Auf dem Formular platzieren Sie lediglich zwei Befehlsschaltflächen und ein Textfeld.
Quelltext
Binden Sie zunächst die folgenden API-Deklarationen ein:
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_SZ = 1
Zunächst schreiben wir eine Funktion, die das Betriebssystem unterscheiden kann:
Function IsSystemNT() As Boolean
Dim info As OSVERSIONINFO
info.dwOSVersionInfoSize = Len(info)
GetVersionEx info
IsSystemNT = (info.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function
Die beiden folgenden Funktionen unterscheiden automatisch das aktuelle Betriebssystem und liefern als
Funktionsergebnis den gesuchten Wert zurück:
880
Function GetRegisteredOwner() As String
Dim lphkey&, bufsize&, puffer$
If IsSystemNT Then
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", lphkey
Else
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion", lphkey
End If
If RegQueryValueEx(lphkey, "RegisteredOwner", 0, REG_SZ, ByVal 0&, bufsize) <> 0 Then Exit Function
puffer = String(bufsize + 1, 0)
RegQueryValueEx lphkey, "RegisteredOwner", 0, REG_SZ, ByVal puffer, bufsize
RegCloseKey lphkey
GetRegisteredOwner = Left(puffer, InStr(puffer, Chr(0)) - 1)
End Function
Function GetRegisteredOrganization$()
Dim lphkey&, bufsize&, puffer$
If IsSystemNT Then
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", lphkey
Else
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion", lphkey
End If
If RegQueryValueEx(lphkey, "RegisteredOrganization", 0, REG_SZ, ByVal 0&, bufsize) <> 0 Then _
Exit Function
puffer = String(bufsize + 1, 0)
RegQueryValueEx lphkey, "RegisteredOrganization", 0, REG_SZ, ByVal puffer, bufsize
RegCloseKey lphkey
GetRegisteredOrganization = Left(puffer, InStr(puffer, Chr(0)) - 1)
End Function
Die Verwendung ist denkbar einfach:
Private Sub OK_Click()
Meldung.value = "<b>Lizenznehmer: </b>" & GetRegisteredOwner & "<br>" & _
"<b>Organisation: </b>" & GetRegisteredOrganization
End Sub
Test
Ohne viele Worte:
Abbildung 13.35 Laufzeitansicht
881
Praxisbeispiele

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.