Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 8.1 : Excel 2016)
WMIを使用したレジストリのサブキー列挙
投稿日時: 19/01/04 21:56:49
投稿者: yu-tananana

ExcelVBAでWMIを使い、「HKEY_LOCAL_MACHINESOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\」以下にあるレジストリの値をセルに表示できるようにしたいのですが、reg.EnumKeyでサブキーの一覧を列挙した際、「HKEY_LOCAL_MACHINESOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\」ではなく、
「SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\」のサブキーを列挙しているようなのですが、同じような現象が発生した方はいらっしゃいますか、また「HKEY_LOCAL_MACHINESOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\」のサブキーを列挙するにはどうすればよいか教えていただけますか。
 
使用しているOSはWindows 8.1 64bit
作成したコードは以下の内容です。
 

Private Sub CommandButton1_Click()
  Dim reg As Object  
  Dim keys As Variant 
  Dim key As Variant
  Dim ret As Long
  Dim display_name As String
  Dim i
  Const HKEY_LOCAL_MACHINE = &H80000002
  Const SubKeyName = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
 
 i = 1
  
  Set reg = CreateObject("WbemScripting.SWbemLocator") _
            .ConnectServer(, "root\default").Get("StdRegProv")
  
  reg.EnumKey HKEY_LOCAL_MACHINE, SubKeyName, keys
  On Error Resume Next  'エラーが発生してもプログラムを中断させない
  
  For Each key In keys  
    display_name = ""  
    ret = reg.GetStringValue(HKEY_LOCAL_MACHINE, SubKeyName & key, "DisplayName", display_name)
    
    If ret <> 0 Then ret = reg.GetStringValue(HKEY_LOCAL_MACHINE, SubKeyName & key, "QuietDisplayN  ame", display_name)
    
   If (ret = 0) And (Len(Trim(display_name)) > 0) Then
      Debug.Print display_name
      Cells(i, 1) = display_name
      i = i + 1
    End If
  Next
  On Error GoTo 0
End Sub

回答
投稿日時: 19/01/07 09:52:52
投稿者: Suzu
トピックに返信