2013-11-15 3 views
0

Windows 7에서 VB6 응용 프로그램으로 Windows 일련 번호를 얻으려고합니다. 그러나 항상 검색하지 못합니다.Windows 7에서 Windows 일련 번호를 가져 오지 못했습니다.

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

, 일련 번호를 검색 할 수 성공할 수 :

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

그것은 다음과 같은 오류를 반환합니다. Windows 7에서 Windows 일련 번호를 가져 오는 VB6 응용 프로그램을 금지했는지 여부는 알 수 없습니다.

도와주세요. 고맙습니다!

+0

Windows 7 32 비트 또는 64? –

답변

2

특이한가요? 이 const를 delcarations에 추가하고 또는 오픈 레지스트리 호출의 값을 사용해보십시오. KEY_WOW64_32KEY and 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 
+0

답변 해 주셔서 감사합니다! – user2051823

관련 문제