2009-06-28 19 views
5

私は次の月に私のキーストロークを分析しようとしており、そうするための簡単なプログラムを一緒に投げたいと思っています。私はコマンドを正確に記録するのではなく、キープレスで一般的な統計を生成するだけです。pythonプログラムがフォアグラウンドにないときに、どのようにキーストロークを読むことができますか?

私はこれをPythonで最も快適にコーディングしていますが、他の提案もあります。これは可能ですか、もしそうなら、私はどのようなPythonモジュールを見ますか?これはすでに完了していますか?

私はOSXですが、UbuntuボックスとWindows XPでもこれを行うことに興味があります。

+3

は、すでにpykeylogger確認しましたか? –

+0

私はそれを使用しようとしたが、私のインストールでは存在しない多くのライブラリが必要であることがわかった。 –

+0

必要なライブラリをダウンロードすると何が問題になりますか? –

答えて

4

あなたがこの便利なプログラムは、テキストのブロックを分析し、あなたの指があなたの最適なレイアウトをお勧めします、その後、それを入力するために移動しなければならなかったどのくらいを教えてくれますhttp://patorjk.com/keyboard-layout-analyzer/

を必要とするように見えます。

元の質問に答えるために、Linuxでは/ dev/event *からキーボード、マウス、ジョイスティックのローカルイベントを読むことができます。私はあなたがたとえば単にcat /dev/event0 > keyloggerと信じています。イベントはstruct input_eventのインスタンスです。 http://www.linuxjournal.com/article/6429も参照してください。

Pythonのstructモジュールは、バイナリデータを解析するのに便利な方法です。

OSXについては、logkextのソースコードをご覧ください。現在のXサーバの録音延長として

+0

うん、非常に面白いです。だから、私はキーストロームを記録してそこに貼り付けるべきですか?私はそれをショット、感謝します。 –

0

収集する統計に応じて、自分で作成する必要はありません。プログラムWorkraveは、キーボードやマウスの動作を監視することにより、小さな休憩をとるように促すプログラムです。それはあなたがおそらく使用できるこの活動の統計を保持します(あなたが非常に詳細な/より具体的な統計を必要としない限り)。最悪の場合、ソース(C++)を見て、それがどのように行われているかを見つけることができます。

+0

私は基本的にdvorakに切り替えるときに私が実際に何らかの利益を得ているかどうかを知りたがっています。 –

+0

Er、キーボードレイアウトの変更は、入力するキーや入力頻度にどのように影響しますか? –

+1

私は彼らがDvorakの恩恵を受けるように私は一般的な英語の配布に従って入力していることを確認したいです。私はかなりプログラムしていますが、私の論文は、メールの書き込み、投稿などを考慮に入れると、私はまだ定期的な英語の配布に終わっています。 –

2

あなた自身がインターフェイスを書くことを計画している場合を除き、デスクトップ環境で管理されている低レベルのキープレスイベントにアクセスする必要があるため、ライブラリを必要とします。

Windowsでは、PyHookライブラリが必要な機能を提供します。

Linuxでは、Python X Libraryを使用できます(グラフィカルデスクトップを使用していると仮定します)。

これらの両方は、pykeyloggerによって有効に使用されます。キープレスイベントがどのようにキャプチャされるかの具体例を参照するには、ソースをダウンロードするのが最善です(たとえばpyxhook.pyを参照)。順序を記録するのではなく、キーの分散を合計するためにこれを変更するのは簡単なことです。

2

http://code.google.com/p/logkext/は本当に助けにはならないLinux用pykeyloggerを使用して、壊れているようです。代わりにevdevとそのdemo関数を見てください。解決策はよりナースですが、少なくとも機能します。

それは定期的にキーやその他の情報のステータスを取得するためにデバイスをポーリングし、ダウン続いてデバイスに

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

をフックを設定することになる:

keyboard_device.poll() 
関連する問題