Мы использовали записи реестра ddeexec для обработки открытия дизайна из Проводника.
MSDN (примерно на 2/3 пути в статью) указывает, что ddeexec устарел, и приложения должны использовать вместо него IDropTarget.
Что мне неясно, так это то, что это на самом деле должно работать ..
например. Если у меня есть Foo.exe, который предназначен для обработки файлов .foo, как будет выглядеть реестр?
HKCR\.foo
(default) = Foo.foo.1
HKCR\Foo.foo.1
shell
open
command
(default) = ?????
Если команда установлена на очевидное:
"C:\Program Files\Foo Corp\Foo.exe" "%1"
затем Foo.exe запускается каждый раз, когда пользователь дважды щелкает по нему, или выбирает открыть из контекстного меню файл .foo.
Однако это означает, что для каждого файла, который пользователь пытается запустить, запускается отдельный экземпляр Foo.exe. YUCK.
Я, конечно, могу написать собственный код, чтобы каким-то образом передать имя файла из 2-го экземпляра Foo.exe обратно в первый экземпляр Foo.exe и затем выйти ... но затем я пишу немало пользовательского кода ,
DDE обычно обрабатывал это изящно (достаточно), запрашивая уже запущенный первый экземпляр Foo.exe, чтобы открыть указанный файл. Благодаря этому приложение MDI умело обрабатывало открытие нескольких документов, каждый из которых был открыт в одном экземпляре Foo.exe.
Если DDE устарел, то каков предпочтительный механизм? Наше приложение имеет гораздо больше смысла в качестве MDI-приложения - мы, конечно же, не хотим, чтобы несколько экземпляров Foo.exe работали (это только раздражало наших пользователей). Я, конечно, не хочу писать новый Foo-Shim.exe, который ищет реальный экземпляр Foo.exe и использует какой-то собственный механизм для передачи ему открываемого имени файла. (Я не могу просто использовать Foo.exe для этой цели, потому что Foo.exe большой и медленно загружается и требует кода безопасности активации, который подсчитывается для каждого экземпляра, и поэтому может отказать в запуске, если вы в ваш максимальный лимит одновременных пользователей).
Я не вижу ничего в IDropTarget, которое, похоже, имеет много общего с этим (обычным) сценарием.
Кто-нибудь знает, для чего здесь МС?