レジストリから値を取得しましょう。文字列と数値、それぞれが取得可能。 インターネットエクスプローラのフルパスを取得するコードをサンプルとして用意しておきました。
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, _ ByVal lpSubKey As String, ByVal ulOptions As Long, _ ByVal samDesired As Long, phkResult 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 Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Const ERROR_SUCCESS = 0& Private Const SYNCHRONIZE = &H100000 Private Const READ_CONTROL = &H20000 Private Const STANDARD_RIGHTS_READ = (READ_CONTROL) Private Const KEY_QUERY_VALUE = &H1 Private Const KEY_SET_VALUE = &H2 Private Const KEY_CREATE_SUB_KEY = &H4 Private Const KEY_ENUMERATE_SUB_KEYS = &H8 Private Const KEY_NOTIFY = &H10 Private Const KEY_CREATE_LINK = &H20 'Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL) 'Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or _ KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or _ KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) 'Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _ KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _ KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE)) '列挙対にしてまえ 'レジストリのキー種類 Public Enum EnumRegKeyType HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_USER = &H80000001 HKEY_LOCAL_MACHINE = &H80000002 HKEY_USERS = &H80000003 HKEY_PERFORMANCE_DATA = &H80000004 HKEY_CURRENT_CONFIG = &H80000005 HKEY_DYN_DATA = &H80000006 End Enum 'レジストリの値の種類 Private Const REG_SZ = 1 Private Const REG_DWORD = 4 '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ' 機 能:文字列を Chr$(0)[=vbNullChar] まで取得する ' 引 数:(in)SrcStr … 対象文字列 ' 返り値:編集された文字列 '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Public Function StrNullCut(ByVal SrcStr As String) As String Dim NullCharPos As Integer NullCharPos = InStr(SrcStr, Chr$(0)) If NullCharPos = 0 Then StrNullCut = SrcStr Exit Function End If StrNullCut = Left$(SrcStr, NullCharPos - 1) End Function '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ' 機 能:レジストリから値を取得する ' 引 数:(i)RegKeyType … レジストリのキー(ル〜ト名) ' (i)RegRoot … ル〜ト以下のパス ' (i)RegName … 取得する値のキー(vbNullStringが指定された場合は「(標準)」がキーとなる) ' (i)IsRegValStr … 取得する値が文字列の場合はTrue、数値の場合はFalse ' (o)RegValue … 取得した値(数値の場合は文字列化される(間抜け)) ' 返り値:正常…True 異常…False '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Public Function GetRegValue(ByVal RegKeyType As EnumRegKeyType, ByVal RegRoot As String, _ ByVal RegName As String, ByVal IsRegValStr As Boolean, _ ByRef RegValue As String) As Boolean Dim hRegKey As Long Dim FuncRet As Long 'レジストリを開く FuncRet = RegOpenKeyEx(RegKeyType, RegRoot, 0&, KEY_READ, hRegKey) If FuncRet <> ERROR_SUCCESS Then Exit Function '文字列を取得 If IsRegValStr Then Dim RegStrBuffer As String * 256 FuncRet = RegQueryValueEx(hRegKey, RegName, 0&, REG_SZ, ByVal RegStrBuffer, Len(RegStrBuffer)) If FuncRet = ERROR_SUCCESS Then RegValue = StrNullCut(RegStrBuffer) End If '数値を取得 Else Dim RegLngBuffer As Long FuncRet = RegQueryValueEx(hRegKey, RegName, 0&, REG_DWORD, RegLngBuffer, Len(RegStrBuffer)) If FuncRet = ERROR_SUCCESS Then RegValue = CStr(RegLngBuffer) End If End If GetRegValue = (FuncRet = ERROR_SUCCESS) End Function '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ' 機 能:インターネットエクスプローラのフルパスを取得する ' 引 数:なし ' 返り値:インターネットエクスプローラのフルパス '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Public Function GetIEPath() As String Dim FuncRet As Boolean 'レジストリからインターネットエクスプローラのフルパスをブッコ抜く FuncRet = GetRegValue(HKEY_LOCAL_MACHINE, _ "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE", _ vbNullString, True, GetIEPath) 'レジストリデータ取得、まさかの失敗の場合 If FuncRet = False Then '[候補1] 'SpecialFolder API で CSIDL_PROGRAM_FILES を指定して、"Program Files" のパスを取得し、 '"Internet Explorer\iexplore.exe" を連結する? '[候補2] '不明? End If End Function |