Explorerからのデザインのオープンを処理するために、ddeexecレジストリエントリを使用しています。
MSDN(記事の約2/3の方法)は、ddeexecが非推奨であり、アプリケーションは代わりにIDropTargetを使用する必要があることを示しています。
私には不明確なのは、これが実際にどのように機能するのかということです。
たとえば、.fooファイルを処理することを目的としたFoo.exeがある場合、レジストリはどのようになりますか?
HKCR\.foo
(default) = Foo.foo.1
HKCR\Foo.foo.1
shell
open
command
(default) = ?????
コマンドが明白に設定されている場合:
"C:\Program Files\Foo Corp\Foo.exe" "%1"
その後、ユーザーがダブルクリックするか、.fooファイルのコンテキストメニューから[開く]を選択するたびに、Foo.exeが起動します。
ただし、これは、ユーザーが起動しようとするファイルごとにFoo.exeの個別のインスタンスが起動されることを意味します。YUCK。
私は確かにカスタムコードを書いて、Foo.exeの2番目のインスタンスからFoo.exeの最初のインスタンスにファイル名を渡して終了することができます...しかし、それから私はかなりの量のカスタムコードを書いています。
DDEは、すでに実行中のFoo.exeの最初のインスタンスに指定されたファイルを開くように要求することにより、これを適切に(十分に)処理するために使用されていました。これにより、MDIアプリで複数のドキュメントを巧みに開くことができ、各ドキュメントはFoo.exeの1つのインスタンス内で開かれました。
DDEが非推奨になった場合、推奨されるメカニズムは何ですか?私たちのアプリは、MDIアプリとしてはるかに理にかなっています。確かに、Foo.exeの複数のインスタンスを実行する必要はありません(ユーザーを煩わせるだけです)。私は確かに、Foo.exeの実際のインスタンスを探し、開かれているファイル名を渡すためにいくつかのカスタムメカニズムを使用する新しいFoo-Shim.exeを作成する必要はありません。(Foo.exeは大きく、読み込みに時間がかかり、インスタンスごとにカウントされるアクティベーションセキュリティコードが必要なため、この目的でFoo.exeを使用することはできません。そのため、次の場合は起動を拒否する可能性があります。最大同時ユーザー制限)。
IDropTargetには、この(一般的な)シナリオと関係があるように見えるものは何もありません。
MSがここで何を意図していたか誰か知っていますか?