2011-01-03 25 views

Antwort

3

Die Tatsache, dass sendto Elemente Dateisystemobjekte sind, ist ein Implementierungsdetail, das Menü wird durch die sendto Shell-Erweiterung gefüllt und könnte erweitert werden, um andere Dinge in der nächsten Version von Windows usw. einzuschließen. Tatsächlich ist es seit Windows95 (powertoys/shell toys)

problematisch, den sendto-Ordner nur als einen Ordner mit Verknüpfungen zu behandeln, die Sie mit einem einzigen Parameter ausführen können

Einige der sendto Elemente sind .lnk die nicht aber eindeutige Dateierweiterungen mit einem registrierten Drop-Handler (.DeskLink, .OtherFolder, .MAPIMail etc)

Die dokumentierte Möglichkeit, einen sendto Artikel aufzurufen wäre IContextMenu zu verwenden. Die unverwaltete Möglichkeit wäre, SHBindToParent für das Objekt aufzurufen, für das Sie die sendto-Aktion emulieren möchten (fragt nach IID_IShellFolder). Rufen Sie dann IShellFolder::GetUIObjectOf an und fragen Sie nach IID_IContextMenu. Dann können Sie IContextMenu::QueryContextMenu aufrufen, um eine HMENU auszufüllen dann musst du das sendto-Untermenü finden (ich denke, es wird sendto als sein Verb zurückgeben, wenn du es mit IContextMenu :: GetCommandString anforderst). Du kannst dann das Untermenü mit den winapi-Menüfunktionen und/oder IContextMenu :: GetCommandString auflisten Element, das Sie aufrufen möchten, rufen Sie dann IContextMenu::InvokeCommand

+0

Danke. Sollte die Frage für eine Weile offen gehalten haben. – NVM

1

Nun, die Sendto einfach ein Ordner auf dem Dateisystem, so einen Befehl Aufruf wird nur eine Datei ausgeführt wird ... für mich in idealer Lage:

C: \ Benutzer \ [Benutzername] \ AppData \ Roaming \ Microsoft \ Windows \ SendTo

+0

'so einen Befehl aufrufen, es gibt nur eine Datei ausgeführt ....' können Sie bitte erarbeiten. Ich dachte nur, dass Sie über die speziellen Ordner in den Ordner gelangen können ... – NVM

+0

Wenn Sie mit der rechten Maustaste auf 'somefile.txt' klicken und eine App senden, glaube ich, dass die App einfach mit' somefile.txt' verknüpft ist Befehlszeilenargument. So könnten Sie es selbst mit sagen, 'Process.Start()': http://msdn.microsoft.com/en-us/library/h6ak8zt5.aspx –

+0

Dies ist nicht korrekt, wenn die (Datei) Erweiterung hat ein registrierter DropHandler, es wird aufgerufen, wenn nicht dann ja, es ist so ziemlich wie ein Process.Start() Aufruf – Anders

Verwandte Themen