1

コードプロジェクトの記事を参照して、小さなシェル拡張をテストしました。全体のプロセスは非常に複雑ですが、次の方法とは何か、そしてそれらが何をするのかについて、いくつかの方法を知っています。

Initialize,DragQueryFile,GetCommandString,InvokeCommand,QueryContextMenu

しかし、それを読んだ後、私たちの ContextMenu 拡張機能が .txt ファイルにどのように関連付けられているのか理解できません。

この記事では、.rgs ファイルの内部を見ると、次のようなレジストリ エントリが作成されていることがわかります。

HKCR
{
  NoRemove txtfile
  {
    NoRemove ShellEx
    {
      NoRemove ContextMenuHandlers
      {
        ForceRemove SimpleShlExt = s '{5E2121EE-0300-11D4-8D3B-444553540000}'
      }
    }
  }
}

しかし、実際に、記事に従ってコードを書いた後、開いたときは次のSimpleShlExt.rgsようになります。

-- CodeProject のように編集 --

HKCR
{

    NoRemove CLSID
    {
        ForceRemove {1E569362-E0A6-4DEA-AB1F-67D6D3DEF1A5} = s 'SimpleShExt Class'
        {

            InprocServer32 = s '%MODULE%'
            {
                val ThreadingModel = s 'Apartment'
            }

        }
    }
}

レジストリは、CLSID と txtfile reg エントリ間のマッピングを動的に作成します。

その場合、たとえばmp3ファイルやドライブ自体など、他のファイルの動作を変更したい場合、コンテキストメニューをポップアップまたは表示したい場合は、どうすればよいですか。そのためのCLSIDがわからないためです。

4

3 に答える 3

1

1 つの可能性は、サポートするすべてのファイル拡張子のコンテキスト メニューを登録することです。もう 1 つの可能性は、拡張機能をワイルドカード / * クラスに登録することです。その後、すべてのファイルに対してインスタンス化されます。次に、このファイルのコンテキスト メニューを表示するかどうかを決定できます。これは、IShellExtInit::Initialize の IDataObject 引数を使用して行うことができます。

于 2010-09-21T10:44:41.967 に答える
0

txt ファイル拡張子で登録する部分を手動で rgs ファイルに追加する必要があります。Visual Studio は、シェル拡張を登録する部分のみを追加します。

于 2010-09-21T14:07:18.730 に答える