- ベストアンサー
キーボード・フックのアプリを作りたい
windowsアプリを作りたいです。 環境: VS2008 ネイティブアプリ C/C++ 内容は、キーボードでctrl + c, ctrl + v時に マウスカーソル部に「コピー」「貼り付け」などの メッセージを表示するものです。 実現方法が分かりません。少し調べたら、"DLL注入", "フック"など のキーワードが出てきましたが、いまいちどのように使用するものなのかが 分かりません。(DLL注入とか危険な感じもします。。実際危険と書かれていたような。。) 実現方法を分かる方がいましたら教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> メモ帳でも、エクセルでも、ワードでもその他のソフトでも > どのソフト上でもメッセージが出るものにしたいです。 なるほど,そういう場合はフック(しかもシステムフック)が必要です。 基本的にはフックプロシージャを用意して登録するだけなのですが, システムフックの場合には DLL を用意したり, DLL の複数のインスタンス間でデータを共有したり, と細かいテクニックが必要です。 そのあたりも,前の回答で紹介したページに詳しく書かれています。 > 具体的にはどのようなことが発生する可能性があるのでしょうか 例えば,Ctrl + V をホットキーに登録すると, メモ帳で Ctrl + V を使って貼付けができなくなります。 この辺はちょっと自身がなかったので,ぼかした表現にしておきましたが, 試してみたらやはりそうでした。 # おせっかいついでに,細かいことを言うと, # Ctrl + C や Ctrl + V をどういう意味で使うかは,アプリケーション次第ですよね。
その他の回答 (2)
> 内容は、キーボードでctrl + c, ctrl + v時に どこで,(どこにフォーカスがあるときに), によって実現方法が変わります。 自分のウィンドウ内ならフックしなくても, メッセージループで WM_KEYDOWN とか見れますし。 本当にフックが必要な場合は, ↓が DLL の作り方から説明されていて,分かりやすかったです。 http://www.kab-studio.biz/Programing/Codian/#DLL_Hook_SClass # RegisterHotKey を使うと, # 他所様を含めて本来の Ctrl + C, Ctrl + V の動作を妨害するかも。
補足
ご回答ありがとうございます。 メモ帳でも、エクセルでも、ワードでもその他のソフトでも どのソフト上でもメッセージが出るものにしたいです。(ユーティリティソフトのような感じ) フォーカスはコピー対象のものをマウスを使用して、選択しますので、 その対象を含むアプリのどこか(?)になるかと思います。 ># RegisterHotKey を使うと, ># 他所様を含めて本来の Ctrl + C, Ctrl + V の動作を妨害するかも。 具体的にはどのようなことが発生する可能性があるのでしょうか
- yama1718
- ベストアンサー率41% (670/1618)
私の紹介する方法ではホットキーのAPI関数を使用します。 関数はホットキー登録と登録解除の2つです。 BOOL RegisterHotKey( HWND hWnd, // ウィンドウのハンドル int id, // ホットキーの識別子 UINT fsModifiers, // キー修飾子フラグ UINT vk // 仮想キーコード ); BOOL UnregisterHotKey( HWND hWnd, // ウィンドウのハンドル int id // ホットキーの識別子 ); RegisterHotKeyでホットキーを登録すると、そのキーが押された時にウィンドウにWM_HOTKEYメッセージが流れてきます。 ただし、この方法はWin95など昔からある方法なので、最近のWindowsやVC++ではもっと使いやすい方法があるかもしれませんね。
お礼
ご回答ありがとうございます。 ホットキーとは思いつきませんでした。ググりつつ、頑張ってみます
お礼
ご回答ありがとうございます。 どうやらシステムフックなるものを使用して作りこむしか 方法はないようですね。。 道は困難なものになろうかと思いますが、やってみたいとおもいます。