2010-11-22 6 views
2

Ich muss eine Anwendung in C# schreiben, die auf alle gedrückten Tasten hört. In Wirklichkeit habe ich einen Barcode-Scanner, der das "Schlüssel gedrückt" -Ereignis sendet, und ich muss es hören ... was es von dort aus tut, übersteigt den Rahmen meiner Frage.Erfassen von Schlüsselereignissen von einem Windows-Dienst in C#

Meine Sicherheitsanforderungen sind, dass es nicht Sign-On an der Maschine in irgendeiner Weise Form sein erlaubt oder Form und diese als Windows-Dienst ausgeführt werden muss. Der Benutzer wird die Maschine starten und weggehen (d. H. Keine Desktop-Sitzung).

Ich gehe davon aus, dass ich dafür unmanaged gehen muss.

Angesichts der Sicherheitsanforderungen ist das sogar möglich? Wenn ja, wären alle Hinweise darauf, wo ich anfangen soll, großartig.

Vielen Dank im Voraus, Jay

+1

Dies ist ein Nicht-Starter. Der Service-Desktop ist nicht der interaktive Desktop und die Hooks sind pro Desktop. Sie sollten ein Autologon-Konto erstellen, das das Listener-Programm ausführt –

Antwort

0

Sie haben pinvoke mit Kombination von Lernen zu lernen, wie man für die richtigen Ereignisse auf der unteren Ebene des OS erzeugt zu suchen. Durch das Aufrufen von user32.dll mit pInvoke kann Ihr verwalteter Code diese Ereignisse über die Hooks filtern.

http://pinvoke.net/default.aspx/user32.SetWindowsHookEx

0

Wenn Sie Tastatur drückt für alle Anwendungen, systemweite Hooks die Art und Weise, normal zu gehen wäre, um zu sehen müssen, aber das Problem ist, dass die Sicherheitsänderungen in Vista und darüber machen Haken eher weniger nützlich. Ein Prozess kann keinen anderen Prozess auf einer höheren Integritätsstufe haken, daher gibt es keine Garantie, dass Sie alle Ereignisse sehen.

Wenn Sie jedoch nur Ereignisse sehen müssen, die zu einer bestimmten App gehen - die Barcodes lesen - dann können Sie, sofern Sie diesen Prozess identifizieren können, einen Thread-spezifischen Haken verwenden und die Integritätsfrage wird nicht auftreten.