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

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

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"...) で二回同じ処理ではなく一度やりたいというこなんですが。

関連するQ&A

  • C言語

    レジストリのキーから値を取得し、その取得した値の中フォルダのファイルの有無を調べあるなら他のフォルダにそのファイルをコピーしたいのですがわかりません。。。レジストリのオープンとキーの取得はわかるんですが。 例 ルートキーHKEY_LOCAL_MACHINE\SOFTWARE\HRPS\BPSS   値の名前 PathName キーの値 c:\program\HRPS このキーの値からc:\program\HRPS の中のファイル(file.c)をチェックし、あれば別のフォルダc:\program\fileの中にコピーしたいんです><

  • レジストリキーLANDesk以下の使い道について

    Windowsのレジストリで HKEY_LOCAL_MACHINE\SOFTWARE\INTEL\LANDesk というキーがあることがありますが、 ここの下のキーはいろんなソフトウェアが使っていそうです。 このレジストリLANDeskはどんな用途で使われているのか 知っている方教えてください。

  • ログオフせずに関連づけを有効にする方法

    複数のPCに対して同じファイルの関連づけを行いたいと考えています。 そのためレジストリを使って一括で関連づけを行う必要があります。 例えば、拡張子vファイルにテキストエディタ「秀丸」を関連付けたいのですが 秀丸で、関連付けの項目で vファイルを秀丸に関連付ける前と後でのレジストリを比較したところ 以下のキーを変更すれば良いことが分かりました。 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.v] @="hidemaru.v" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hidemaru.v] @="V ファイル" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hidemaru.v\DefaultIcon] @="C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe,1" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hidemaru.v\shell] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hidemaru.v\shell\open] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hidemaru.v\shell\open\command] @="\"C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\" %1" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hidemaru.v\shell\print] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hidemaru.v\shell\print\command] @="\"C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\" /p %1" [HKEY_LOCAL_MACHINE\SOFTWARE\Hidemaruo\Hidemaru\Capabilities\FileAssociations] ".v"="hidemaru.v" [HKEY_USERS\S-1-5-21-3000369501-1364672687-3950771759-1001\Software\Microsoft\Windows NT\CurrentVersion\EXTENSIONS] "v"="C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe ^.v" これをregファイルとして保存し、実行してみたのですが ダブルクリックや右クリックメニューには設定が反映されるのですが アイコンには反映されないことが分かりました。 一度ログオフすると反映されます。 秀丸上で設定を変更を行った場合には ログオフすることなく、設定を反映させることができるのですが、 レジストリの場合にはどうすればログオフすることなく反映させることができますか? 恐らくbatファイルが必要になるのではないかと思いますが どなたかその方法を教えていただけないでしょうか?

  • レジストリで・・

    ↓のレジストリで間違って変えてしまったので、 皆さんの数値?はどんなになってるでしょうか? HKEY_LOCAL_MACHINE→SOFTWARE→Microsoft→ Windows NT→CurrentVersion→WinlogonにあるSfcQuotaの値のデータを いってくれると嬉しいです。

  • Windows2000で使用者名を変更するには?

    Ryo-Donと申します。 Windows2000Professionalで、システムのプロパティ(全般のタブ) に表示されている、"使用者名"を変更したいのですが、 どのようにすればよろしいのでしょうか? Windows98などではレジストリの キー名 :[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion] 値の名前:RegisteredOwner を編集するのですが、 Windows2000では、このレジストリの値が見つかりません。 どこを編集すればよいか困っております。 良きアドバイスお願い致します。

  • スパイウェアと疑わしいファイルの削除方法

    先日ad-awareを使用してスパイウェアを削除しようとしたところ、下記のレジストリキーとファイルが削除できませんでした。 CnsMin key:HKEY_CLASSES_ROOT\clsid\{b83fc273-3522-4cc6-92ec-75cc86678da4}\ CnsMin key:HKEY_CLASSES_ROOT\cnshelper.ch\ CnsMin key:HKEY_CLASSES_ROOT\cnshelper.ch.1\ CnsMin key:HKEY_CLASSES_ROOT\interface\{df692509-d9ef-48a0-9cd0-3aa5b81f6f68}\ CnsMin key:HKEY_LOCAL_MACHINE\software\3721\ CnsMin key:HKEY_CURRENT_USER\software\3721\ CnsMin key:HKEY_LOCAL_MACHINE\software\interchina\ CnsMin key:HKEY_LOCAL_MACHINE\software\microsoft\internet explorer\advancedoptions\!cns\ CnsMin key:HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\uninstall\cnsmin\ CnsMin key:HKEY_CLASSES_ROOT\typelib\{aab6bce3-1df6-4930-9b14-9ca79dc8c267}\ CnsMin key:HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\explorer\shellexecutehooks\{b83fc273-3522-4cc6-92ec-75cc86678da4} CnsMin file:C:\WINDOWS\Downloaded Program Files\cnsio.dll cnsio.dllのほうは検索にも引っかからないし、 レジストリキーも削除しても再起動するとしっかり入っています。 これらを完全に削除する方法はないでしょうか?

  • レジストリがおかしい

    最近、パソコンを立ち上げると勝手にツールバーの並びが変わるので、初期設定がおかしいのだろうかとレジストリ ”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run” を見ようとすると 「オープンエラー・Runが開けません!」 といってそのキーにおける全ての作業を受け付けません。 どうすれば良いでしょうか? 追記 ・レジストリに関わるソフトで「窓の手」を実行したところ、やはり同じレジストリの部分でバグが出、設定をキャンセルされます。

  • 不明なレジストリキーの削除方法

     初めまして。  パソコンに関してはまだまだ初心者に毛が生えた程度のものですが、調子に乗ってレジストリのことを勉強していて、不要なレジストリキーは削除してもよいことを知り、色々見ていた中で、「HKEY_LOCAL_MACHINE\HKEY_LOCAL_MACHINE\SOFTWARE\株式会社」というキーが出てきました。 このキーにアクセスしようとしても「株式会社 を開けません。キーを開こうとしてエラーが発生しました。」とメッセージがでてアクセスできません。  こんな名前のソフトをインストール及び削除をした記憶は有りません。  残しておいても大丈夫とは思いますが、何か気持ち悪くてどなたか対処方法をご教授ください。  よろしくお願いいたします。

  • レジストリ変更(HKEY_LOCAL_MACHINE_SOFTWARE)

    よろしくお願い致します。 現在OSにWINDOWS XP、セキュリティソフトにNortonを使用しているのですが、Nortonで以下の現象が起き困っております。 Auto-ProtectがONにならない。(もちろんサービスで有効に設定し、再起動してあげてもです) 気になる要因としては、以下の二つです。 (1)セキュリティセンターのサービスが毎回無効になる (2)レジストリの値 ・HKEY_LOCAL_MACHINE_SOFTWARE\Microsoft\Security Center\AntiVirusDisableNotify ・HKEY_LOCAL_MACHINE_SOFTWARE\Microsoft\Security Center\FirewallDisableNotify ・HKEY_LOCAL_MACHINE_SYSTEM\CurrentControlSet\wscsvc\Start

  • JWordとCnsMinのアンインストール

    昨日関連する質問をしたばかりなので恐縮ですが、JWordとCnsMinのアンインストールについてご教授ください。 アンインストールした後に、FireFoxで、あるブログで紹介されていた“「http://安田」とアドレスバーに入れエンター”という確認をやってみたところ、"安田.com"というサイトに繋がりました。 これはまだ削除しきれていないという事なのでしょうか? よろしくおねがいします。 ▼ 以下やった事です。 まず、JWordのHPのアンインストールでアンインストール、再起動。 まだ「プログラムのアンインストール」に残っていたのでこちらでもアンインストール、再起動。 その後、regedit.exeで確認したところ HKEY_CURRENT_USER\Software\3721 が残っていたので、レジストリのバックアップを取ってこれを削除。 以下はすべて削除されている事を確認しました。 HKEY_LOCAL_MACHINE\Software\3721 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run :CnsMin HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Search :OSearchAssistant HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Search :OCustomizeSearch HKEY_LOCAL_MACHINE\SOFTWARE\ :InterChina HKEY_CLASSES_ROOT\CLSID\{B83FC273-3522-4CC6-92EC-75CC86678DA4} HKEY_CLASSES_ROOT\CnsHelper.CH HKEY_CLASSES_ROOT\CnsHelper.CH.1 HKEY_CLASSES_ROOT\Interface\{DF692509-D9EF-48A0-9CD0-3AA5B81F6F68} HKEY_CLASSES_ROOT\TypeLib\{AAB6BCE3-1DF6-4930-9B14-9CA79DC8C267} HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\AdvancedOptions\!CNS HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\Extensions\{5D73EE86-05F1-49ed-B850-E423120EC338} HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CnsMin

専門家に質問してみよう