• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語)

C言語でレジストリの複数のキーを一度にオープンする方法

このQ&Aのポイント
  • C言語でレジストリのルートキーをオープンする際に複数のキーの値を一度にオープンする方法について教えてください。
  • 例えば、RegOpenKeyEx(HKEY_LOCAL_MACHINE, "\SOFTWAREA"..)というコードがあり、SOFTWAREの一つ下位にあるキー全てを一度にオープンしたいのですが、どのようにすればよいでしょうか?また、オープンした後に下位のキーの値を一つずつ取得する方法も知りたいです。
  • また、RegOpenKeyEx(HKEY_LOCAL_MACHINE, "\SOFTWARE\AA\Adobe"..)というコードがあり、AAの部分にはseaやsunなどの値が入る場合、二回同じコードを書かずに一度で行う方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>RegEnumKeyEx()だとすべてのサブキーをオープンしてしまうのではないのでしょうか?sun、seaだけのキーだけをオープンするには。。。 >>RegEnumKeyEx()でキー名を取得してオープン。 > >って書いてるんですから。RegEnumKeyExは、あくまでも指定したキーのサブキーの名前を列挙するだけです。 >名前を取得したキーのオープンはそれぞれRegOpneKeyExを使ってオープンします。

その他の回答 (3)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sun) >RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sea) >sunとseaの両方同じキーの値の名前のデータを取得したいのんです。 それを一度のオープンで行いたいんです><。 なるほど。 で、結論から言うと、キーの途中”だけ”が違うなのではなく、途中が違うということは、”別物”ということです。 なので、毎回Openしてください。 ただし、ルートから指定する必要はありません。 #1の下の方に書いたように、RegEnumKeyEx()で列挙に使用しているハンドル+列挙されたサブキー名でオープンできますので。 というか、”すべてオープン”ってときは、列挙した結果を元にオープンしていくんですから一部分が同じだろうと異なっていようと気にしなくていいはずですが。 再帰的に呼び出せば階層の深さも基本的に気にする必要ないですし。

gfgdhggddg
質問者

補足

RegEnumKeyEx()だとすべてのサブキーをオープンしてしまうのではないのでしょうか?sun、seaだけのキーだけをオープンするには。。。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>聞きたいのですがRegEnumKeyEx()を用いると >キー名を取得してオープンするというこですが一度で全部キーをオープンできるですか? 違います。RegEnumKeyExの使い方、折角なんですから自分で調べましょうよ。 >RegEnumKeyEx()でキー名を取得してオープン。 って書いてるんですから。RegEnumKeyExは、あくまでも指定したキーのサブキーの名前を列挙するだけです。 名前を取得したキーのオープンはそれぞれRegOpneKeyExを使ってオープンします。 >RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sun\\Adobe"...) >RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sea\\Adobe"...) >で二回同じ処理ではなく一度やりたいというこなんですが。 私にはなんで同じキーを2回Openする必要があるか理解できないんですが。 もしかして キーAのオープン→値1の取得→キーAのクローズ キーAのオープン→値2の取得→キーAのクローズ といった流れを1つのキーに対して値の種類の分だけ繰り返してるんですか?こんなことしてないですよね? もしそうなんでしたらキーAのオープン→値1の取得→値2の取得→値3の取得→値4の取得→キーAのクローズ とするだけですが。

gfgdhggddg
質問者

補足

こんばんは。 RegEnumKeyEx()方はできそうでです。RegEnumKeyEx()でサブキーで列挙したキーからそのキーをオープンし値取得し、サブキーがある間インクリメントしていけばいいので! もうひとつの方なんですが1つのキーに対しての値のくり返しではありません。 >RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sun) >RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sea) >sunとseaの両方同じキーの値の名前のデータを取得したいのんです。 それを一度のオープンで行いたいんです><。 RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE)をオープンし、RegEnumKeyEx()で\\sunと\\seaのサブキーを取得してオープンするしかないのですかね?それだと\\sun\\sea以外のキーも取得してしまうので。。。いい方法を教えていただけないでしょうか?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>レジストリのルートキーをオープンするときにキーの値が複数ありそれを一度で行うにはどうしたいいでしょう 意味不明。 ルートキーとはHKEY_CLASSES_ROOTやHKEY_CURRENT_USERのことです。これらのキーは値を持ちません。 >とありSOFTWAREの一つ下位にあるキー全てをオープンするにはどうしたらいいでしょう? RegEnumKeyEx()でキー名を取得してオープン。 >またRegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\AA\\Adobe"...) >でAAの部分がsea,sunなど値が入る時二回書かないで一度でやるにはどうしたいいでしょうか? これも意味不明。 何と何で2回なのかが分かりません。 質問は状況を何も知らない人が理解できるような文章で。 ですが、一応アドバイス。 RegOpenKeyEx()の第1パラメータは、HKEY_CLASSES_ROOTやHKEY_LOCAL_MACHINEのようなものしか指定できないわけではありません。 自分でオープンしたキーのハンドルを指定することも可能です。 その場合は、そこからの相対位置でサブキーを指定することになります。

gfgdhggddg
質問者

補足

失礼しました。 聞きたいのですがRegEnumKeyEx()を用いるとキー名を取得してオープンするというこですが一度で全部キーをオープンできるですか? またRegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\AA\\Adobe"...) >でAAの部分がsea,sunなど値が入る時二回書かないで一度でやるにはどうしたいいでしょうか? とは RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sun\\Adobe"...) RegOpenKeyEx(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\sea\\Adobe"...) で二回同じ処理ではなく一度やりたいというこなんですが。