Microsoft Access VBA - WidnowsのProduct IDを表示する方法


文書番号: ac2002010
動作確認: Access 95/97/2002

◆概要
この資料は、Microsoft AccessでWidnowsのProduct IDを表示する方法を記載しています。

◆内容

コントロールパネルのシステムを選択すると、Windows のプロダクトIDが表示されます。このProduct IDはレジストリに記録されていますので、これを取得すればAccessのフォームにWindows Product IDを表示できます。

◆Sample code

標準モジュールに以下のコードを貼り付けます。

Option Compare Database

Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const REG_SZ = 1&
Public Const SYNCHRONIZE = &H100000
Public Const READ_CONTROL = &H20000
Public Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or _
    KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const VER_PLATFORM_WIN32_NT = 2

'APIの宣言
Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" ( _
    ByVal hkeyRoot As Long, _
    ByVal lpszSubKey As String, _
    ByVal ulOptions As Long, _
    ByVal samDesired As Long, _
    phkeyResult As Long _
    ) As Long

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

Declare Function RegCloseKey Lib "advapi32" (ByVal hkey As Long) As Long
Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
    (lpVersionInformation As OSVERSIONINFO) As Long

'構造体
Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Function GetWinProductId() As String
    Dim stSubKey As String
    Dim stProductid As String * 255
    Dim hkeyRoot As Long
    Dim lErr As Long
    Dim OSVER As OSVERSIONINFO
    
    OSVER.dwOSVersionInfoSize = Len(OSVER)
    lErr = GetVersionEx(OSVER)
    If lErr = 0 Then Exit Function
        
    If OSVER.dwPlatformId = VER_PLATFORM_WIN32_NT Then
        stSubKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
    Else
        stSubKey = "SOFTWARE\Microsoft\Windows\CurrentVersion"
    End If
        
    lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, stSubKey, 0&, KEY_READ, hkeyRoot)
    If lErr <> 0 Then Exit Function
    
    lErr = RegQueryValueEx(hkeyRoot, "ProductId", 0&, REG_SZ, _
                                        ByVal stProductid, 255)
    Err = RegCloseKey(hkeyRoot)
    If lErr <> 0 Then Exit Function
    
    GetWinProductId = Left(stProductid, InStr(stProductid, vbNullChar))
End Function

次に適当なフォームにテキストボックスを貼り付け、そのコントロールソースに

=GetWinProductId()
と入力します。

画面の設計

プロパティ

◆実行結果

実行結果




▼ページトップに戻る