メモ帖 MFCでレジストリを使うとき注意すべきこと

メニュー









※このページは作成者の個人的メモです。
※このページは本文中に登場する各種団体の公式なページでは有りません。ゆえに各種団体へ本ページ群の内容に対してクレーム頂いても対応頂けません。
※その他注意書きが表紙にあります。

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

MFCってどうやってレジストリ使おう、といろいろやるんだが、制約がきつい。
次の1点は意識しておこう。

MFCでレジストリを使うとき、アプリケーション名(application name)を変更するには。
結論。そんな方法は無い。

CWinApp::SetRegistryKey の説明をMSDNライブラリで引くと、
こんなところにできますよー、と
「キーには次の形式で格納されます。HKEY_CURRENT_USER\Software\<company name>\<application name>\<section name>\<value name>。」
という説明がある。

で、どこになるんだろう、どうやって設定するんだろうと調べまわるが、application nameは記述が見当たらなかったってわけ。
悪あがきした挙句、衝撃の真実を目にしてしまうわけ。

<company name> : SetRegistryKey で設定する。
<application name> :出来上がった実行プログラムの名前(○×△.exe の「○×△」)
<section name> : GetProfileInt、GetProfileString、WriteProfileInt、WriteProfileString のパラメータlpszSectionに設定
<value name>  :GetProfileInt、GetProfileString、WriteProfileInt、WriteProfileString のパラメータlpszEntryに設定

Application name部分は、自分自身のファイル名を引いているようだ。
ビルドした後にexeをリネームしたら、見事にその名前どおりに application name部分の違うエントリーが出来上がっていた。

つまりexeの名前をかっこよくひょこひょこリネームするのはいいが、レジストリもちゃんとそれにあわせておかないといけない。
別のサポートプログラムなんか作って設定しようとは、考えないこと。

これをやっていたから泣く羽目になった。
RegOpenKeyEx()・RegQueryValueEx()、RegCreateKeyEx()・RegSetValueEx()をつかって、自前のレジストリ操作関数をつくったよ、もぅ。