Программно вызвать SendTo - PullRequest
       11

Программно вызвать SendTo

2 голосов
/ 03 января 2011

Как программно (.net) вызвать команду в контекстном меню SendTo проводника Windows?

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Тот факт, что элементы sendto являются объектами файловой системы, является деталью реализации, меню заполняется расширением оболочки sendto и может быть расширено для включения других вещей в следующую версию Windows и т. Д. Фактически, обработка папки sendto какпроблематично было просто создать папку с ярлыками, которые можно выполнить с одним параметром, поскольку Windows95 ( powertoys / shell toys )

Некоторые из элементов sendto не являются .lnk, а являются уникальными расширениями файлов сзарегистрированный обработчик отбрасывания (.DeskLink, .OtherFolder, .MAPIMail и т. д.)

Документированным способом вызова элемента sendto будет использование IContextMenu .Неуправляемый способ сделать это - вызвать SHBindToParent для объекта, для которого вы хотите эмулировать действие sendto (запрашивая IID_IShellFolder), затем вызвать IShellFolder :: GetUIObjectOf и запросить IID_IContextMenu, после чего вы можете вызвать IContextMenu :: QueryContextMenu чтобы заполнить HMENU, вам нужно будет найти подменю sendto (я думаю, что оно вернет sendto в качестве своего глагола, если вы спросите его с помощью IContextMenu :: GetCommandString). Затем вы можетеПеречислите подменю с функциями меню winapi и / или IContextMenu :: GetCommandString, чтобы найти элемент, который вы хотите вызвать, затем вызовите IContextMenu :: InvokeCommand

1 голос
/ 03 января 2011

Ну, Sendto - это просто папка в файловой системе, поэтому при вызове команды просто запускается файл ... для меня он находится по адресу:

C: \ Users \ [имя пользователя] \ AppData \ Roaming \ Microsoft \ Windows \ SendTo

...