2017-04-14 7 views
0

私はC++のコンテキストメニューシェル拡張(dll)を持っており、これを私の名前変更プログラムとバンドルしたいと思います。dllシェル拡張が実行するプログラムの場所をどのように知っていますか?

私の質問は、dllがロードされ、コンテキストメニューからExecuteが呼び出されると、シェル拡張が起動するプログラムの場所をどのように知るのですか?

シェル拡張(dll)を含めるためにinno setupを使用します。私の理解は、シェルの拡張機能は、システムにインストールされている名前を変更するプログラムに選択されたファイルパスを渡す処理されます。しかし、シェルはどのようにプログラムを呼び出すことができますか? について

答えて

1

シェルには、シェル拡張の実装のプライベートディテールである「名前変更プログラム」の概念はありません。シェル拡張が外部プログラムを起動しようとしている場合は、シェル拡張がそのプログラムの場所を知っていることを確認するのはあなたの責任です。

たとえば、Innoのセットアッププロンプトでシェル拡張機能と一緒に別の設定UIを提供しても、ユーザーの選択をレジストリまたはユーザーのプロファイル内のファイルに保存することで、いつでもシェルの拡張機能が必要なときにそれを見つけることができます。

また、問題のプログラムがレジストリのように独自のインストールパスを既に格納している場合は、シェル拡張が必要な​​ときにその場所を直接取得するようにしてください。

どちらの方法でも、シェルの拡張機能は、IShellExtInit::Initialize()実装に渡された入力ファイルパスを覚えていなければなりません。そして、IContextMenu::InvokeCommand()実装は、それらのパスを外部プログラムに渡します位置しています。

関連する問題