2009-06-28 11 views
5

Ich versuche meine Tastenanschläge im nächsten Monat zu analysieren und möchte dazu ein einfaches Programm zusammenstellen. Ich möchte die Befehle nicht genau protokollieren, sondern generelle Statistiken über meine Tastendrücke generieren.Wie können Sie Tastenanschläge lesen, wenn das Python-Programm nicht im Vordergrund ist?

Ich bin am komfortabelsten Codierung in Python, aber bin offen für andere Vorschläge. Ist das möglich, und wenn ja, welche Python-Module sollte ich mir ansehen? Ist das schon gemacht worden?

Ich bin auf OSX aber wäre auch daran interessiert, dies auf einer Ubuntu-Box und Windows XP zu tun.

+3

Haben Sie bereits eingecheckt pykeylogger? –

+0

Ich habe versucht, es zu benutzen und fand heraus, dass es viele Bibliotheken benötigt, die auf meiner Installation nicht vorhanden sind. –

+0

Was ist falsch beim Herunterladen der benötigten Bibliotheken? –

Antwort

4

Es sieht aus wie Sie http://patorjk.com/keyboard-layout-analyzer/

Dieses praktische Programm benötigt einen Textblock analysieren und Ihnen sagen, wie weit die Finger es reisen musste eingeben, dann optimales Layout empfehlen.

Um Ihre ursprüngliche Frage zu beantworten, können Sie unter Linux von/dev/event * für lokale Tastatur-, Maus- und Joystick-Ereignisse lesen. Ich glaube du könntest zB einfach cat /dev/event0 > keylogger. Die Ereignisse sind Instanzen von struct input_event. Siehe auch http://www.linuxjournal.com/article/6429.

Python struct Modul ist eine bequeme Möglichkeit, binäre Daten zu analysieren.

Für OSX, werfen Sie einen Blick auf den Quellcode zu logkext. http://code.google.com/p/logkext/

+0

hmm, sieht sehr interessant aus. Also sollte ich meinen Keystream loggen und dann dort einfügen? Ich werde es versuchen, danke. –

0

Je nachdem, welche Statistiken Sie sammeln möchten, müssen Sie dies möglicherweise nicht selbst schreiben. Das Programm Workrave ist ein Programm, das Sie daran erinnert, kleine Pausen einzulegen, und zwar durch Überwachung der Tastatur- und Mausaktivität. Es führt Statistiken über diese Aktivität, die Sie wahrscheinlich verwenden könnten (es sei denn, Sie möchten sehr detaillierte/spezifischere Statistiken). Im schlimmsten Fall können Sie sich die Quelle (C++) ansehen, um herauszufinden, wie es gemacht wird.

+0

interessant, ich werde es überprüfen. Ich möchte im Grunde wissen, ob, wenn ich zu dvorak wechsle, dass ich tatsächlich einen Nutzen bekomme. –

+0

Äh, wie beeinflusst das Ändern eines Tastaturlayouts, welche Tasten Sie eingeben oder wie oft Sie sie eingeben? –

+1

Ich möchte sicherstellen, dass die Schlüssel, die ich tippe, der allgemeinen englischen Verteilung folgen, damit ich von Dvorak profitiere. Ich programmiere ziemlich viel, aber meine These ist, dass ich noch mit einer regelmäßigen englischen Verteilung am Ende bin, wenn Sie meine E-Mail-Schreiben, SO-Posting usw. einbeziehen. –

2

Sofern Sie nicht beabsichtigen, die Schnittstellen selbst zu schreiben, benötigen Sie eine Bibliothek, da Sie, wie andere Poster darauf hingewiesen haben, auf Ereignisse zugreifen müssen, die von der Desktop-Umgebung verwaltet werden.

Unter Windows bietet die Bibliothek PyHook die erforderliche Funktionalität.

Unter Linux können Sie Python X Library verwenden (vorausgesetzt, Sie verwenden einen grafischen Desktop).

Beide werden von pykeylogger zu einem guten Ergebnis verwendet. Sie sollten die Quelle am besten herunterladen (siehe z. B. pyxhook.py), um spezifische Beispiele für das Erfassen von wichtigen Presseereignissen zu sehen. Es sollte trivial sein, dies zu ändern, um die Verteilung von Schlüsseln zu summieren, anstatt die Reihenfolge aufzuzeichnen.

2

als der aktuelle Bilanz Erweiterung des X-Servers scheint gebrochen zu werden, pykeylogger für Linux mit nicht wirklich helfen. Schauen Sie sich stattdessen evdev und dessen demo Funktion an. Die Lösung ist fieser, aber es funktioniert zumindest.

Es kommt auf die Einstellung eines Hakens an das Gerät

import evdev 
keyboard_location = '/dev/input/event1' # get the correct one from HAL or so 
keyboard_device = evdev.Device(keyboard_location) 

Dann schlagen Sie regelmäßig das Gerät abfragen, den Status der Schlüssel und andere Informationen zu bekommen:

keyboard_device.poll()