他端末のレジストリ情報を取得          <TOP>


RegConnectRegistry ほかのコンピュータ上の定義済みレジストリハンドルとの接続を確立
RegCloseKey レジストリのハンドルを解放
RegOpenKeyEx レジストリのキーのハンドルを確保
RegQueryValueEx レジストリの値を取得
 

 

'================================================================
'= 他端末のレジストリ情報を取得
'=    (RegConnectRegistry2.bas)
'================================================================
#include "Windows.bi"

#define HKEY_CLASSES_ROOT -2147483648   '拡張子に関する情報や、それらとアプリケーションとの関連づけに関する情報
#define HKEY_CURRENT_USER -2147483647   '現在Windowsにログインしているユーザーの情報
#define HKEY_LOCAL_MACHINE -2147483646  'PCを利用するユーザーに共通の設定情報
#define HKEY_USERS -2147483645          'Windowsを利用するユーザー個別の情報
#define KEY_QUERY_VALUE &H1             'サブキーデータを問い合わせるためのアクセス権
#define KEY_SET_VALUE &H2               'サブキーデータの設定を許可
#define KEY_ALL_ACCESS &H3F             'レジストリに対するすべての権限を許可
#define REG_SZ 1                        'ヌル終端文字列
#define ERROR_SUCCESS &H0               '正常終了の戻り値を示す

' ほかのコンピュータ上の定義済みレジストリハンドルとの接続を確立
Declare Function Api_RegConnectRegistry& Lib "advapi32" Alias "RegConnectRegistryA" (ByVal lpMachineName$, ByVal hKey&, phkResult&)

' レジストリのハンドルを解放
Declare Function Api_RegCloseKey& Lib "advapi32" Alias "RegCloseKey" (ByVal hKey&)

' レジストリのキーのハンドルを確保
Declare Function Api_RegOpenKeyEx& Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&)

' レジストリの値を取得
Declare Function Api_RegQueryValueEx& Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpvName$, ByVal lpReserved&, lpType&, ByVal lpData$, lpcbData&)

Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared hRemoteReg As Long

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hKey As Long
    Var sValue As String
    Var RemoteName As String
    Var KeyName As String
    Var Ret As Long

    RemoteName = Edit1.GetWindowText

    'リモート端末の接続(空文字の場合はローカルコンピューター)
    Ret = Api_RegConnectRegistry(RemoteName, HKEY_LOCAL_MACHINE, hRemoteReg)
    
    If (Ret = ERROR_SUCCESS) Then
        Text1.SetWindowtext "接続されました!"
    Else
        Text1.SetWindowtext "エラー!"

        If hRemoteReg <> 0 Then
            Ret = Api_RegCloseKey(hRemoteReg)
        End If
        Exit Sub
    End If

    Wait 50

    KeyName = Edit2.GetWindowText

    Ret = Api_RegOpenKeyEx(hRemoteReg, "HARDWARE\DESCRIPTION\System", 0, KEY_QUERY_VALUE, hKey)

    If Ret <> ERROR_SUCCESS Then
        Text1.SetWindowtext "オープンできません!"
    Else
        sValue = String$(255, " ")
        Ret = Api_RegQueryValueEx(hKey, KeyName, 0&, REG_SZ, sValue, 255)

        If Ret <> ERROR_SUCCESS Then
            Text1.SetWindowtext "取得できません!"
        Else
            Text1.SetWindowtext sValue
        End If

        Ret = Api_RegCloseKey(hKey)

        If Ret <> ERROR_SUCCESS Then
            Text1.SetWindowtext "クローズできません!"
        End If
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Edit1_Change edecl ()
Sub Edit1_Change()
    Text1.SetWindowText ""
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End