2005-09-22-01-TypeTacho 試作品 - project-enigma

2005-09-22-01-TypeTacho 試作品

>> Site top >> weblog >> 月別アーカイブ >> 2005年09月のlog >> 2005-09-22-01-TypeTacho 試作品

最終更新日付:2014/01/02 21:27:27


TypeTacho 試作品

2005 年 09 月 22 日

職業は自称プログラマ。なぜだかインフラ周りとか色々やるので、本当に開発でお金を稼いでいるのか自分でも常々疑問ではある。しかし、やっぱりプログラマなのだ。キーボード大好きである。マウス撲滅結社東京支部代表である(今作った)。Windows でエクスプローラを起動するだけでも [Ctrl]+[ESC] → R → explorer → [return] とタイプするくらいなのだ(さぁやってごらん!)。職業的なスコープが狭いせいもあるが、自分のタイピングスピードはなかなかのもんだと自負している。しかし、ここ5年の自分を振り返ると、その速度は徐々に落ちてきている。そんなわけで、たまには Palmware 以外のソフトウェアの構想について少し。

作ろうとしているのは、「タイピングタコメーター」とでもいうものだ。起動しておくと、キーボードのタイピングをフックして打鍵速度を計り、表示してくれる。自動車のタコメーターに倣って、1分当たりの打鍵数という表示がいいな。あとは累積打鍵数や瞬間最大打鍵速度なんかが表示されるとうれしい。

問題は、別のアプリがアクティブな時でも全てのキーボード入力をフックしなくてはならないということだ。これを、Win32 の世界では「グローバルフック」というらしい。自作のフックを OS にインストールする場合、Win32 API の SetWindowsHookEx( ) という関数を使用することになるが、グローバルフックの場合、フック関数は DLL 内になければならない...

ところで、DLL のコード内で(普通に)大域変数を使用した場合、複数のプロセスがその DLL を共有したとしても大域変数はプロセスごとに割り当てられる。だから、DLL 内の大域変数ではプロセス間のデータの共有はできない。このグローバルフックの場合もやはりそうなのだろう...フック関数内部からメッセージを投げたりしなければならないため、フックの DLL はタコメーターアプリのウィンドウハンドルとフック自身のハンドルを知っていなければならない。そのため、DLL 内の大域変数は共有データとして指定されたセクションに置いてやらなければならないのだ。

...というわけで、コア部分の用件は大体固まった。グローバルフック関数を収めた DLL とお試し実装の EXE を1つずつ。ZIP に固めたものをとりあえず置いておこう。

適当なところに展開し、TypeTachoTest.exe を実行すればよい。ちなみに Windows95 & 98 では動作しない。動作するのは Windows NT 4.0 SP 3 以降である。また、OS に潜りこむようなアプリなので、大事な作業をしているときは使用しない方が良いと思う。

これはまだ試作品なので、画面は以下のような適当実装だ。だが、ひとまずのところ知りたい情報は表示されるようになっている。画面下部のプログレスバーは、その時点での最高速度に対する、現在の速度の百分率を表示している。ちなみに、今日の最高速度は780 hit/min である。瞬間最高速度で1秒当たり13回打鍵しているわけだな。

できれば、画面は自動車のタコメーターみたいにしたいなぁ...と思ったり、タスクマネージャの CPU 使用率履歴のような折れ線グラフも欲しいなぁ...と思ったりしている。しかし、内部の複雑なカラクリが大好きなかわりに表面的な画面周りがとても面倒臭く感じる性分なので、この先はどうなるかわからない。このアプリを面白いと思う方、ご意見を求む。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : 開発

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.