0

VB6 アプリケーションを使用して、Windows 7 で Windows シリアル番号を取得しようとしています。ただし、常に取得に失敗します。

SScript.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId")

次のエラーが返されます。

Unable to open registry key "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId" for reading.

Win XP では、シリアル番号の取得に成功します。Windows 7 が VB6 アプリケーションによる Windows シリアル番号の取得を禁止しているかどうかはわかりません。

助けてください。ありがとうございました!

4

1 に答える 1

2

独特ですね。この const を宣言に追加し、OR値をオープン レジストリ呼び出しに追加してみてください。KEY_WOW64_32KEY および KEY_WOW64_64KEYへの回答には非常に良い説明があります。

Private Const KEY_WOW64_64KEY As Long = &H100& '32 bit app to access 64 bit hive

Private Function GetWindowsProductId() As String
    Dim strReturn As String
    Dim strBuffer As String
    Dim lngType As Long
    Dim lngBufLen As Long
    Dim lngRst As Long
    Dim hKeyHandle As Long

    lngRst = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", 0, KEY_READ Or KEY_WOW64_64KEY, hKeyHandle)

    If hKeyHandle <> 0 Then
        strBuffer = String(255, vbNullChar)
        lngBufLen = Len(strBuffer)
        lngRst = RegQueryValueEx(hKeyHandle, "ProductId", ByVal 0&, lngType, ByVal strBuffer, lngBufLen)
        If lngRst = 0 Then
            If lngType = REG_SZ Then
                If lngBufLen > 0 Then
                    strReturn = Left$(strBuffer, lngBufLen - 1)
                Else
                    strReturn = "nothing was returned"
                End If
            Else
                strReturn = "there was an error"
            End If
        ElseIf lngRst = 2 Then     'the key does not exist
            strReturn = "the key was not found"
        Else  'if the return is non-zero there was an error
            strReturn = "There was an error " & CStr(lngRst) & " reading the key"
        End If
    End If

    GetWindowsProductId = strReturn

End Function
于 2013-11-15T16:55:01.010 に答える