タイトル : Re^11: WebBrowserコントロールによるWebページにつきまして 投稿日 : 2018/02/15(Thu) 17:16 投稿者 : 魔界の仮面弁士
> 終了時には作成した名前("Project1.exe")を削除したいと思っています。 何故削除したいのでしょうか? FEATURE_BROWSER_EMULATION は、起動時に読み込まれる設定なのですから、 起動する前には既にレジストリに書き込んだ状態でなければなりません。 そのため先の例では、レジストリ設定後にアプリを再起動する仕組みを設けています。 再起動、ということは、そのアプリは一旦終了してしまうわけですから、 そこで削除してしまうのは都合が悪いと思うのですが。 どうしても動的に生成・削除したいのであれば、レジストリを操作するアプリと そこから呼び出されるアプリを別の exe に分けてしまうのはどうでしょう。 どうしても exe を一つにまとめたいなら、それが再起動なのかどうかの判断のため、 再起動時にコマンドライン オプションを付与するようにし、再起動されたかどうかを Command 関数の戻り値で If 判定するようにするといった方法はあります。 ただしいずれの方法を使うにしても、アプリ起動中に強制終了した場合に レジストリが削除されずに残ってしまうことを許容できるのかどうか、とか、 Project1.exe が複数起動された場合にどのように振舞うのか、といった点について しっかりと検討しておかねばならないでしょう。 > 既に同名で作成されていた場合は削除しないように考えています。 起動時に RegRead しておけば、そのエントリが起動前に作成済みかどうかを調べられますね。 作成済みで無かった場合には、終了時に削除する必要が無いと判断することが出来そうです。 とはいえそれを実現するには、今回述べた「再起動」の判定仕様を設計することが先決ですね。 > Call DeleteSetting(" ", " ", "Project1.exe") > 終了時の" "に何を記述すれば分かりませんでした。 DeleteSetting は SaveSetting で書き込まれたエントリーのために使われるものです。 今回は RegWrite メソッドで書き込んでいるのですから、DeleteSetting は無関係です。 DeleteSetting / SaveSetting / GetSetting / GetAllSettings によって アクセスされるレジストリエントリーは、 HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ の配下に限定されます。今回の用途には使えません。 今回のケースでは、 CreateObject("WScript.Shell").RegDelete "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\Project1.exe" を用いて削除します。 ただし先にも述べたとおり、この手のレジストリ設定は、本来は そのアプリケーションのインストーラーによって制御されるべきです。 もしくは該当のアプリケーションに対して、設定画面を設けるようにし、 その中でレジストリの編集や削除を実施するようにします。 |