Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10567 / 13646 ツリー ←次へ | 前へ→

【20272】レジストリの変更 ランバダ 04/12/4(土) 2:08 質問[未読]
【20273】Re:レジストリの変更 ちゃっぴ 04/12/4(土) 9:23 回答[未読]
【20274】Re:レジストリの変更 ちゃっぴ 04/12/4(土) 9:30 発言[未読]
【21062】Re:レジストリの変更 りゃんわん 05/1/9(日) 14:36 質問[未読]
【21075】Re:レジストリの変更 ちゃっぴ 05/1/10(月) 19:40 回答[未読]
【20292】Re:レジストリの変更 Kein 04/12/4(土) 14:38 回答[未読]

【20272】レジストリの変更
質問  ランバダ  - 04/12/4(土) 2:08 -

引用なし
パスワード
   はじめまして。
今API関数についてやっているのですが、
レジストリを変更させるAPI関数がよくわからないんですけど、
教えてほしいです!

とりあえず、
キーの作成、削除、値の取得、設定を行うプログラムを作ろうと思っています。

【20273】Re:レジストリの変更
回答  ちゃっぴ  - 04/12/4(土) 9:23 -

引用なし
パスワード
   API使わなくてもできますけど・・・

1. WSHShellのRegRead, RegWriteを使った方法

'要参照 Windows Script Host Object Model

Dim objWSHShell As IWshRuntimeLibrary.WshShell

Set objWSHShell = New IWshRuntimeLibrary.WshShell
With objWSHShell
  .RegWrite "HKCU\Software\Chappi\Test\", 1, "REG_DWORD"
  .RegWrite "HKCU\Software\Chappi\Test\hoge", "hogehoge!", "REG_SZ"

  Debug.Print CInt(.RegRead("HKCU\Software\Chappi\Test\"))
  Debug.Print .RegRead("HKCU\Software\Chappi\Test\hoge")

  .RegDelete "HKCU\Software\Chappi\Test\hoge"
  .RegDelete "HKCU\Software\Chappi\Test\"
  .RegDelete "HKCU\Software\Chappi\"
End With

1. WMIのStdRegProvを用いた方法

Sub EnumPrinters()
  Dim objRegProv   As Object
  Dim strKeyPath   As String
  Dim vntValueNames  As Variant
  Dim vntValueTypes  As Variant
  Dim strValueName  As String
  Dim strValue    As String
  Dim i        As Long
  
  Const HKCU = &H80000001
  
  Set objRegProv = _
    GetObject("winmgmts:\\.\root\default:StdRegProv")
  strKeyPath = _
    "Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts"
  objRegProv.EnumValues HKCU, strKeyPath, _
    vntValueNames, vntValueTypes
  
  For i = 0 To UBound(vntValueNames)
    strValueName = vntValueNames(i)
    objRegProv.GetStringValue HKCU, strKeyPath, _
      strValueName, strValue
      
    Debug.Print strValueName & " on " _
      & Split(strValue, ",", -1, 0)(1)
  Next i
End Sub

【20274】Re:レジストリの変更
発言  ちゃっぴ  - 04/12/4(土) 9:30 -

引用なし
パスワード
   1. WSHShellのRegRead, RegWriteを使った方法

RegRead メソッド
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wsmthregread.asp


2. WMIのStdRegProvを用いた方法

StdRegProv
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/stdregprov.asp

ここら辺を参考にお勉強ください。

1だと、Keyや値に"\"が含まれているとエラーになるので、
2の方法でやったほうがいいかもしれません。

【20292】Re:レジストリの変更
回答  Kein  - 04/12/4(土) 14:38 -

引用なし
パスワード
   WSH等の方法が簡単ですが、どうしてもAPIでやりたければ
http://homepage1.nifty.com/MADIA/
↑ここの左側のフレームから Visual Basic を選択、右のフレームで API技術関連 
を選択、メニューから レジストリ を選んで下さい。ひととおりのやり方が書いて
あります。

【21062】Re:レジストリの変更
質問  りゃんわん  - 05/1/9(日) 14:36 -

引用なし
パスワード
   私もレジストリを変えようと思ってみたんですが、
よくわかりません・・・

>2の方法でやったほうがいいかもしれません。
と、いわれてやろうと思ったのですが、
うまく実行できないので、アドバイスお願いします

【21075】Re:レジストリの変更
回答  ちゃっぴ  - 05/1/10(月) 19:40 -

引用なし
パスワード
   >>2の方法でやったほうがいいかもしれません。
>と、いわれてやろうと思ったのですが、
>うまく実行できないので、アドバイスお願いします

具体的にどこがわからないのでしょう?

とりあえず、Sampleを簡単に解説します。

Sub EnumPrinters()
  Dim objRegProv   As Object
  Dim strKeyPath   As String
  Dim vntValueNames  As Variant
  Dim vntValueTypes  As Variant
  Dim strValueName  As String
  Dim strValue    As String
  Dim i        As Long
  
  Const HKCU = &H80000001
  
  ' StdRegProvを取得
  Set objRegProv = _
    GetObject("winmgmts:\\.\root\default:StdRegProv")
  strKeyPath = _
    "Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts"

  ' strKeyPath以下のRegstry名を配列として、vntValueNamesに格納
  objRegProv.EnumValues HKCU, strKeyPath, _
    vntValueNames, vntValueTypes
  
  For i = 0 To UBound(vntValueNames)
    strValueName = vntValueNames(i)
    
    ' 文字列の値を取得
    objRegProv.GetStringValue HKCU, strKeyPath, _
      strValueName, strValue
    
    ' 出力  
    Debug.Print strValueName & " on " _
      & Split(strValue, ",", -1, 0)(1)
  Next i
End Sub

この方法では、まず、StdRegProv Class の Instance を
取得する必要があります。

  ' StdRegProvを取得
  Set objRegProv = _
    GetObject("winmgmts:\\.\root\default:StdRegProv")

まあ、呪文のようなものです。とりあえず、そのまま覚えてください。

詳しく知りたければ・・・
WMI スクリプト入門 : 第 1 部
http://www.microsoft.com/japan/msdn/columns/scripting/scripting06112002.asp


で、StdRegProv Class の Instance が出来たら、それに対して、
StdRegProv Class の Method を使用してやればいいわけです。

たとえば、文字列型の値を取得したい場合には、GetStringValue
文字列型の値を書き込みたい場合には、SetStringValueといった風に・・・

あとは、GetStringValue, SetStringValue の Link 先をたどって
Reference を参照してください。

10567 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free