2009-08-26 6 views
0

Je veux écrire mon propre outil de snippets globaux pour Windows XP et supérieur. Ce serait un outil toujours actif dans l'arrière-plan qui apparaîtrait sur une touche de raccourci définie globalement, permettez-moi de sélectionner un extrait avec des arguments de substitution, puis collez l'extrait expansé dans l'entrée de texte de n'importe quel contrôle activé, et enfin, retournez-moi à cette application précédente/boîte de saisie.Comment écrire mon propre programme Global Snippets avec .NET?

Je sais comment faire la plupart des aspects algorithmiques, mais je ne sais pas comment atteindre ces fenêtres axée sur les caractéristiques:

1 - Hotkey mondial: Comment définir une séquence de touches dans les fenêtres (de .net?) qui fonctionnera, même en entrant des données dans une autre zone de texte d'applications? (Habituellement ce sera une fenêtre de navigateur)

2 - Coller dans une autre application: Je pourrais utiliser le paste-buffer et Ctrl-C, mais je veux éviter les touches supplémentaires.

3 - Retour de contrôle à la fenêtre d'origine: retour en toute transparence dans mon flux d'entrée: comment faire? En fait, comment mon outil sait-il même où j'étais avant qu'il apparaisse? Les raisons pour lesquelles je veux écrire cela moi-même est d'abord d'apprendre comment (parce qu'il y a d'autres outils comme celui-ci je voudrais faire) et deuxièmement, je ne connais pas d'outils de snippets qui ont la substitution d'arguments Je veux. Donc, les deux (2) questions sont: A) Quelle devrait être mon approche générale? et B) comment puis-je accomplir au mieux les points 1 à 3 ci-dessus?

+0

J'ai découvert cette question lors de la recherche d'un outil avec ces exigences exactes. J'ai cherché des semaines, et n'ai rien trouvé qui répond vraiment à ce besoin. Avez-vous: soit trouvé quelque chose qui répond à ces exigences, soit écrit vous-même? – emkayultra

+0

Non, désolé. La réponse ici était aussi proche que je l'ai eu, mais il y a toujours quelques problèmes de vb.net. – RBarryYoung

Répondre

2

Vous devrez utiliser des crochets de clavier système globaux pour capturer votre raccourci clavier. Il y a un CodeProject article montrant comment faire cela à partir de .NET. Une fois que vous avez "piégé" votre frappe, vous pouvez utiliser l'API Windows pour obtenir le handle Windows actuel. Cependant, j'essaierais d'éviter d'activer votre application. Vous devriez pouvoir simplement coller votre nouveau texte, et permettre à l'application de le gérer.

L'inconvénient de l'utilisation de l'API Windows est qu'elle ne fonctionne pas dans tous les cas, et que les cas "cassés" deviennent de plus en plus courants. Par exemple, les applications WPF ne fournissent pas de HWND pour chaque élément dans une fenêtre. Obtenir le handle "control" actuel ne vous donnera que la fenêtre, pas l'élément approprié.


Modifier: Une autre source de référence est article in MSDN Magazine. Il montre comment faire cela via C# en utilisant P/Invoke.

+0

L'article traite de l'écriture d'une DLL VC++ non managée pour l'activer dans VB/C#. VC++ Unmnaged est un peu au-delà de moi, y-a-t-il de toute façon plus près de chez moi? – RBarryYoung

+0

Voici un autre article: http://msdn.microsoft.com/en-us/magazine/cc188966.aspx Celui-ci est entièrement fait en C#, en utilisant P/Invoke. Malheureusement, vous devez utiliser P/Invoke et l'API Windows pour cela, car il n'y a pas d'API de hook dans le framework. –

+0

Je vous encourage à déplacer la deuxième référence dans votre réponse, je l'ai vraiment trouvé plus utile. – RBarryYoung

Questions connexes