2010-09-30 14 views
0

Le logiciel Dropbox fournit une extension shell qui ajoute des éléments de menu contextuel à tous les fichiers d'un dossier spécifique. L'un de ceux-ci génère un lien public pour afficher le fichier sélectionné.WinAPI: entrée de menu contextuel d'appel fournie par l'extension shell

Dans un outil C#, je souhaite appeler cette entrée sans aucune intervention de l'utilisateur. Je veux obtenir le même comportement que si l'utilisateur cliquait sur l'élément de menu contextuel d'un fichier sélectionné.

Je sais que l'extension shell est fournie par une DLL, est-il possible de faire un appel à cette DLL pour atteindre le comportement attendu?

Répondre

1

extensions Shell mettent en œuvre IContextMenu et il est possible d'exécuter des commandes de menu sans afficher un menu (Voir this blog post pour plus de détails sur les « hébergement » IContextMenu)

Une fois que vous avez le menu, vous appelleriez IContextMenu :: GetCommandString et regarder pour un verbe spécifique, si Dropbox n'a pas de verbe quelque peu unique, vous devrez faire quelque chose de hacky, soit correspondre par le texte de menu seul, soit appeler directement l'extension de shell Dropbox dll (DllGetClassObject) et simuler tout (Faire semblant de être COM et shell) ou si vous connaissez le CLSID, vous pouvez au moins obtenir de l'aide de COM et juste faire la partie shell.

Il est un outil gratuit appelé runmenu qui vous permet de jouer avec des menus shell/IContextMenu (je suis sûr que vous pouvez trouver une copie quelque part)

+0

Merci beaucoup pour votre réponse! Je vais y jeter un coup d'oeil. –