• ベストアンサー

キーボード・フックのアプリを作りたい

windowsアプリを作りたいです。 環境: VS2008 ネイティブアプリ C/C++ 内容は、キーボードでctrl + c, ctrl + v時に マウスカーソル部に「コピー」「貼り付け」などの メッセージを表示するものです。 実現方法が分かりません。少し調べたら、"DLL注入", "フック"など のキーワードが出てきましたが、いまいちどのように使用するものなのかが 分かりません。(DLL注入とか危険な感じもします。。実際危険と書かれていたような。。) 実現方法を分かる方がいましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#137556
noname#137556
回答No.3

> メモ帳でも、エクセルでも、ワードでもその他のソフトでも > どのソフト上でもメッセージが出るものにしたいです。 なるほど,そういう場合はフック(しかもシステムフック)が必要です。 基本的にはフックプロシージャを用意して登録するだけなのですが, システムフックの場合には DLL を用意したり, DLL の複数のインスタンス間でデータを共有したり, と細かいテクニックが必要です。 そのあたりも,前の回答で紹介したページに詳しく書かれています。 > 具体的にはどのようなことが発生する可能性があるのでしょうか 例えば,Ctrl + V をホットキーに登録すると, メモ帳で Ctrl + V を使って貼付けができなくなります。 この辺はちょっと自身がなかったので,ぼかした表現にしておきましたが, 試してみたらやはりそうでした。 # おせっかいついでに,細かいことを言うと, # Ctrl + C や Ctrl + V をどういう意味で使うかは,アプリケーション次第ですよね。

otaks
質問者

お礼

ご回答ありがとうございます。 どうやらシステムフックなるものを使用して作りこむしか 方法はないようですね。。 道は困難なものになろうかと思いますが、やってみたいとおもいます。

その他の回答 (2)

noname#137556
noname#137556
回答No.2

> 内容は、キーボードでctrl + c, ctrl + v時に どこで,(どこにフォーカスがあるときに), によって実現方法が変わります。 自分のウィンドウ内ならフックしなくても, メッセージループで WM_KEYDOWN とか見れますし。 本当にフックが必要な場合は, ↓が DLL の作り方から説明されていて,分かりやすかったです。 http://www.kab-studio.biz/Programing/Codian/#DLL_Hook_SClass # RegisterHotKey を使うと, # 他所様を含めて本来の Ctrl + C, Ctrl + V の動作を妨害するかも。

otaks
質問者

補足

ご回答ありがとうございます。 メモ帳でも、エクセルでも、ワードでもその他のソフトでも どのソフト上でもメッセージが出るものにしたいです。(ユーティリティソフトのような感じ) フォーカスはコピー対象のものをマウスを使用して、選択しますので、 その対象を含むアプリのどこか(?)になるかと思います。 ># RegisterHotKey を使うと, ># 他所様を含めて本来の Ctrl + C, Ctrl + V の動作を妨害するかも。 具体的にはどのようなことが発生する可能性があるのでしょうか

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.1

私の紹介する方法ではホットキーのAPI関数を使用します。 関数はホットキー登録と登録解除の2つです。 BOOL RegisterHotKey(  HWND hWnd, // ウィンドウのハンドル  int id, // ホットキーの識別子  UINT fsModifiers, // キー修飾子フラグ  UINT vk // 仮想キーコード ); BOOL UnregisterHotKey(  HWND hWnd, // ウィンドウのハンドル  int id // ホットキーの識別子 ); RegisterHotKeyでホットキーを登録すると、そのキーが押された時にウィンドウにWM_HOTKEYメッセージが流れてきます。 ただし、この方法はWin95など昔からある方法なので、最近のWindowsやVC++ではもっと使いやすい方法があるかもしれませんね。

otaks
質問者

お礼

ご回答ありがとうございます。 ホットキーとは思いつきませんでした。ググりつつ、頑張ってみます

専門家に質問してみよう