Pyhookedを利用してバックグラウンドでキー入力を取得し一日の入力文字数を計測したい

こんにちは!
管理人のでぃすこです!
さて、今回の記事なのですが、私が個人的に欲しかったツールを作って見るという、完全に自己満足な内容になっております。
早い話が、一日に何回キーボードをタイプしたのか、
ということを計測したいなと思ったわけです。
ホントはA~Zまで個別に計測しようかな、とも思っていたのですが、
それだとコードも長くめんどくさくなるので、
とりあえずすべてのキーをタイプした回数をバックグラウンドで拾い続けてくれるようなプログラムを作成しました。
使用環境は以下
・windows10
・Python 3.6.4
今回利用したライブラリ
・pyhooked
まずはpyhookedのインストールからなのですが、
これは非常にシンプルで
pip install pyhooked
で完了します。かんたんすぎる~
まずはpyhookedのGitHubにてかんたんなサンプルコードを確認しまして、
実際に書いたコードが以下になります。
from pyhooked import Hook, KeyboardEvent, MouseEvent | |
import sys | |
x = 0 | |
print("Ctrl + Bで今日タイプした文字数がわかります。") | |
def handle_events(args): | |
global x | |
x = x + 1 | |
if isinstance(args, KeyboardEvent): | |
if args.current_key == 'B' and args.event_type == 'key down' and 'Lcontrol' in args.pressed_key: | |
y = x/2 | |
print("あなたが今日タイプした文字数は") | |
print(int(y)) | |
print("文字です。") | |
hk = Hook() | |
hk.handler = handle_events | |
hk.hook() |
計測方法はこのプログラムを実行して、コンソールを最小化して作業するだけ。
何回タイプしたかを計測したいと思ったときは、
コンソール上でCtrl+Bで表示できるようにしてあります。
躓いたところとしては、キーのイベントを取得する際に、
kwy downをつけることで押し込みを検知できるようなのですが、
すべてのキーに対してそれを適用する方法がわからなかったので、
このコードのhandle_eventsは押し込みと離したときの2回を一回のタイプで検知してしまっておりました。
なので、最終的な出力のif文の中で変数に格納する際に1/2にして格納し、
出力しているような形になります。
かなり無理矢理感のあるコードではありますが、
まあ動いたので良し。
私以外が使うわけではないと思いつつ、サイトに掲載してしまっているので
ご利用の際にはご注意くださいませ~