●Windowsのキーボードイベントをキャッチする方法
Windowsのキーボードイベントをキャッチする方法には2種類あります。
・単一のアプリケーション内でキャッチする方法(ローカルフック)
・全てのアプリケーション内でキャッチする方法(グローバルフック)
グローバルフックは、不具合があった際の影響範囲が大きいのと、デバッグの難しさがある為
今回の開発では、まずはローカルフックするアプリケーションを作成して、動作確認してから
グローバルフックに移行するようにしました。
ローカルフック〜グローバルフックまで、バッチリ解説されていたのがこちらのサイトです。
アプリケーションの根幹は、ほとんどこち
らのサイトの情報だけで完成できたと言っても過言ではありません。
感謝!
・
ローカルフック ・
グローバルフック ・
DLLの作成(グローバルフックに必要) ・
第160章 メッセージフックの基礎 一箇所、ローカルフックのSetWindowsHookEx関数呼び出しのコードが、グローバルフックになっていたようです。これまた、Google先生に教えてもらいました。
SetWindowsHookExで質問 訂正前:
m_hHook = ::SetWindowsHookEx( WH_KEYBOARD
, (HOOKPROC)CKeyboardHook::KeyboardProc
, NULL, 0 );
訂正後:
m_hHook = ::SetWindowsHookEx( WH_KEYBOARD
, (HOOKPROC)CKeyboardHook::KeyboardProc
, NULL, GetCurrentThreadId());
●システム時刻をミリ秒単位で取得する方法。
ミリ秒単位でシステム時刻を取得する方法は、実のところ良くわかりませんでした。(ダメ)
今回のアプリケーションでは、timeGetTime関数 を使っています。
これに関しては、こちらのサイトを参考にさせて頂きました。
timeGetTimeの使い方 時間の考え方 timeGetTime(MSDN) この関数は、「システムが起動してからの時間をミリ秒単位で返す」という仕様です。
なんか、、、微妙な仕様・・・w
桁あふれが発生した場合、0に戻るようなのでそうした絶妙なタイミングで不具合が発生する可能性は無きにしもあらずです。
が、上記は処理が拘束で非常に制度が高いとい点と、循環するサイクルが 49.71 日であるという点
そして、開発が簡単という3点(笑)で採用しました。
つまり、49.71日の丁度循環のタイミングでキー連打した場合に、誤ってチャタリングと判定される可能性がある。
という感じです。
大丈夫だよね。。。タブン
●タスクトレイに常駐するアプリケーションの作成方法。
タスクトレイに常駐するアプリケーションというのはつまり
・アプリケーション起動時にウィンドウが表示されない。
・タスクバーにも表示されない。
・タスクトレイにアイコンが表示される。
・タスクトレイのアイコンから、右クリックでメニュー出して終了できる。
あたりが、肝になってきます。
これら全てを、バッチリ解説して下さいっていたのがこちらのサイトです。
つくってみよう−タスクトレイアプリケーションの作成 ポップアップメニューを表示する 「タスクトレイアイコンを表示する(常駐アプリケーションのために...)」 ●アイコンを作って仕上げ!
タスクトレイのアイコンは、以下のフリーソフトを使って編集させて頂きました。
元の素材は、
TypeZ 公式サイト から拝借したのは内緒です。(ダメ?)
IcoFX Ver1.6 / フリーウェア今回、最新のMFCを使った開発になってしまったので、ソフトウェア利用の際には
再配布ライブラリを別途インストールする必要が出てしまいました。
が、恐らく今回の内容くらいなら、Win32APIだけで開発可能なんだろうし
それが出来ていれば、もっと導入が簡単に出来たと思います。
精進が足らんな〜。頑張らねば!
clipboard.swf