3

ファイルがクリックされたときにそれに対してアクションを実行できるように、シェル拡張機能を作成することを検討しています。(他のコンテキスト メニューと同様に :))

コンテキスト メニューに新しいメニュー項目を挿入し、1 つまたは複数のファイルに対してアクションを実行するために最低限必要なものは何ですか。比較例は、10 個のファイルを選択して Zip に送信した場合です。

いくつかのアンマネージ コードを記述する必要があると読みましたが、C++ アンマネージ コードに関する知識はほぼゼロなので、Windows コンテキスト メニュー ([ファイル] > [右クリック]) でメニュー項目を取得するためにできる限り少ないことをしたいと考えています。その後、C# コンソール アプリを呼び出してメインの処理を行いたいのですが、アンマネージ コードから ac# コンソール アプリを呼び出すことは可能ですか?

また、Windows シェル プログラムを作成するには、どのような種類のビジュアル スタジオ プロジェクトが必要ですか? どのプロジェクト タイプから選択しますか。

  • Win32 コンソール アプリ
  • MFC アプリケーション
  • Win32 プロジェクト
  • ATL プロジェクト
  • MFC DLL
  • CLR コンソール アプリ
  • クラス ライブラリ
  • Makefile プロジェクト
  • MFC ActiveX コントロール
  • Windows フォーム コントロール ライブラリ

乾杯

4

4 に答える 4

5

この MSDN の記事から始めることができます。

シェル拡張機能の実際の作業を行うために (マネージ コードで記述された) プロセスを生成するというアプローチは問題ないはずです。CreateProcessを介して、選択したファイルをコマンドラインパラメーターとして渡すことをお勧めします。

プロジェクトの種類に関しては、Win32 ダイナミック リンク ライブラリ (DLL) を生成する必要があります。2005 では、実際には Win32 DLL プロジェクト タイプがあります。2008 (これを使用していると推測されます) では、Win32 プロジェクトを作成し、表示されるウィザードでアプリケーションの種類として DLL を選択する必要があります。

于 2010-03-06T04:27:37.427 に答える
3

シェル拡張機能を完全にマネージコードで記述することは不可能ではありませんが(私はそれを行いました)、さまざまな理由からお勧めできませんが、最大のものはシェル拡張機能がインプロセス拡張機能であるため、エクスプローラーは全体をロードする必要がありますCLRを独自のアドレス空間に挿入します。異なるバージョンのCLRに2つの拡張機能が記述されている場合は、神がお手伝いします。

それに加えて、このような小さな関数には多くのオーバーヘッドがかかります。したがって、アクティブテンプレートライブラリ(ATL)など、これを行うために利用できるツールがたくさんあるので、C++で作成するのが最善です。

于 2010-03-06T05:39:25.963 に答える
2

Windows と COM の C++ の経験がない場合、シェル拡張はおそらく最も簡単なプロジェクトではありません。

実際にシェル拡張を作成する必要がありますか?

レジストリを使用して新しいメニュー オプションを簡単に追加し (例については、こちらを参照)、そのオプションの「コマンド」を C# 実行可能ファイルに設定できます。

%1パスでコマンドを使用して、選択したファイルをプロセスに渡すことができます。

すべてのファイルのサンプル レジストリ エントリは次のようになります。

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\\*\shell\SomeCmd]
@="Do Some Cmd"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\\*\shell\SomeCmd\command]
@="\"Path to your app\\YourApp.exe\" \"%1\""

%1末尾の に注目してください- それはファイルの名前になります。制限は、実際にはすべてのファイルに対して 1 回インスタンス化されることです。これは拡張機能にも発生します。レジストリ エントリが設定されると、削除するまでそこに残ります。

于 2010-03-06T05:33:20.300 に答える
0

.NET で管理されていないクライアントを使用する方法の一例を次に示します: http://groups.google.com/group/codefactory/web/wcf-service-and-unmanaged-c-client

はい、シェルと対話するには、アンマネージ コード (C++) を記述する必要があります。一部のシェル拡張機能は C# で記述されていますが、エクスプローラーのプロセス空間にランタイムをロードするため、Microsoft でも推奨されていません。ContextMenu 拡張機能の作成に関する codeproject の記事はたくさんあります。IContextMenu インターフェイスを実装する COM dll を作成し、それをレジストリに適切に登録する必要があります。

于 2010-03-06T04:34:21.867 に答える