2009-08-26 11 views
0

Ich möchte mein eigenes globales Snippet-Tool für Windows XP und höher schreiben. Dies würde ein immer im Hintergrund laufendes Tool sein, das auf einem global definierten Hotkey angezeigt wird, erlaube mir, ein Snippet mit Substitutionsargumenten auszuwählen, und füge das expandierte Snippet dann in die Texteingabe des Steuerelements ein, in dem ich mich gerade befand aktivierte es und brachte mich schließlich zu diesem vorherigen App/Eingabefeld zurück.Wie schreibe ich mein eigenes Global Snippets Programm mit .NET?

Ich weiß, wie die meisten der algorithmischen Aspekte zu tun, aber ich weiß nicht, wie diese Fenster-basierte Funktionen erreichen:

1 - Globale Hotkey: Wie kann ich eine Schlüssel-Sequenz in Fenstern definiere (von .net?) das funktioniert, auch wenn Sie Daten in ein anderes App-Textfeld eingeben? (Normalerweise wird dies ein Browserfenster sein)

2 - Einfügen in eine andere App: Ich könnte den Paste-Buffer und Ctrl-C verwenden, aber ich möchte die zusätzlichen Tastenanschläge vermeiden.

3 - Zurück zum ursprünglichen Fenster: Nahtlos zurück in meinen Eingangsstrom: Wie mache ich das? In der Tat, wie weiß mein Werkzeug überhaupt, wo ich war, bevor es auftauchte?

Die Gründe, dass ich dies selbst schreiben möchte, ist zuerst zu lernen, wie (weil es andere Werkzeuge wie dieses zu machen möchte) und zweitens, ich kenne keine Schnipsel-Tools, die die Argumentsubstitution haben Ich will.

Also, die zwei (2) Fragen sind A) Was sollte mein allgemeiner Ansatz sein? und B) Wie kann ich die obigen Punkte 1 bis 3 am besten erreichen?

+0

Ich habe diese Frage bei der Suche nach einem Werkzeug mit genau diesen Anforderungen festgestellt. Ich habe seit Wochen gesucht und habe nichts gefunden, was diese Bedürfnisse wirklich erfüllt. Haben Sie auch etwas gefunden, das diese Anforderungen erfüllt, oder selbst geschrieben? – emkayultra

+0

Nein, tut mir leid. Die Antwort hier war so nah wie ich, aber es gibt immer noch ein paar Probleme von vb.net. – RBarryYoung

Antwort

2

Sie müssen Hotkeys für globale Systemtastatur verwenden, um Ihren Hotkey zu erfassen. Es gibt eine CodeProject article, die zeigt, wie man das in .NET macht.

Sobald Sie Ihren Tastenanschlag "gefangen" haben, können Sie das Windows-API verwenden, um das aktuelle Windows-Handle abzurufen. Ich würde jedoch versuchen, die Aktivierung Ihrer Bewerbung zu vermeiden. Sie sollten in der Lage sein, einfach Ihren neuen Text einzufügen und der Anwendung zu erlauben, damit umzugehen.

Der Nachteil der Verwendung der Windows-API ist, dass es nicht in allen Fällen funktioniert, und die "gebrochenen" Fälle werden immer häufiger. Zum Beispiel stellen WPF-Anwendungen kein HWND für jedes Element innerhalb eines Fensters bereit, so dass Sie nur das Fenster und nicht das entsprechende Element erhalten, wenn Sie das aktuelle Steuerelement aufrufen.


Edit: Eine weitere Bezugsquelle ist diese article in MSDN Magazine. Es zeigt, wie man dies über C# mit P/Invoke macht.

+0

Der Artikel beschreibt das Schreiben einer nicht verwalteten VC++ - DLL, um dies in VB/C# zu aktivieren. Unmanaged VC++ ist ein bisschen jenseits von mir, ich bin da sowieso näher zu Hause? – RBarryYoung

+0

Hier ist ein anderer Artikel: http://msdn.microsoft.com/en-us/magazine/cc188966.aspx Dies ist vollständig in C# mit P/Invoke getan. Leider müssen Sie dafür P/Invoke und die Windows API verwenden, da es im Framework keine Hooking-API gibt. –

+0

Ich ermutige Sie, die zweite Referenz in Ihre Antwort zu verschieben, ich fand es definitiv hilfreicher. – RBarryYoung