• ベストアンサー

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

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

  • otaks
  • お礼率53% (270/507)

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

  • ベストアンサー
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
質問者

お礼

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

関連するQ&A

  • キーボードフックについて

    現在グローバルフックでキーボードからマウスを操作するプログラムを作成中です。 dll内にフックプロシージャを作成し、十字キーが押されたら呼び出し元のウインドウにWM_USERを送るというつくりになっています。 コードを組んだところ、一応動いたのですが、一度だけキーを押したはずなのにWM_USERが2,3回ぐらい送られてきます。 これを回避する方法はあるのでしょうか? どなたかご教授お願いします。 <環境> Windows Vista VC++ 2005 Express Edition

  • キーボードについて教えて下さい

    カテゴリーが違っていましたらすみません。 職場でキーボードで Ctrlキー + Cでコピー  Ctrlキー + V で貼り付けと教えて頂きましたが、 他にも色々あるように思います。 このような、キーボードの使い方を説明している、サイトがあれば、 教えていただけませんでしょうか。 宜しくお願いします。

  • .NETのキーボード

    こんにちわ。 いまVB.NET2003で開発をしている者です。 [オプション]-[環境]-[キーボード]の設定を "Visual Basic6"としていると, ステップ実行が"F8", 関数定義が"F2", 前回のカーソル位置移動が"Ctrl + Shift + F2" で実現できました。 [オプション]-[環境]-[キーボード]の設定を "[規定の設定]"としたときに, ステップ実行が"F11"で実現できましたが, 関数定義と,前回のカーソル位置移動の実現方法がわかりません。 この機能も含めて.NETの規定のファンクションキーの 操作を調べるにはどこを見れば良いでしょうか? 教えてください。 よろしくお願いします。

  • IPhoneのキーボードアプリの設定について

    IPhone初心者です(アンドロイドからの乗り換えです)。 文字入力の不便さ(特にカーソルの左右上下移動)のためキーボードアプリを使おうと思っています。 その際アプリダウンロード後当該アプリと、メーラーやメモなど他のアプリとの連携はできるのでしょうか? できるとしたら、その設定方法を教えていただけますでしょうか。

  • 使用頻度が高いキーボードショートカット

    キーボードショートカットはソフトによって色々ありますが 大体どのソフトでも共通していて皆さんが良く使うショートカットを教えてください 自分がよく使うのは 検索 CTRL+F コピー CTRL+C 切り取り CTRL+X 貼り付け CTRL+V 直接削除 SHIFT+Del などです

  • 追加キーボード,カスタマイズ

    自分でキーの役割を設定できるキーボードがあったらと思いました. できれば,今ある通常使用のキーボードはそのままキープして,追加で使えるものがあったらと思います.説明がうまくなくてすみません.イメージとしては,よくテンキーを打つ用の手のひらサイズのキーボードがありますが,これは追加用ですよね. そのように,追加できて,そのキー達はカスタマイズできる(例えば,あるキーは,Ctrl + C,に対応していて,またあるキーはCtrl +Vに対応している,という具合です).  いかがでしょうか.検索して調べているのですが,どのようなキーワードを使えばいいのか分からず,お伺いしました.どうか情報を頂ければと思います.どうぞ宜しくお願いします.

  • クリップボードからの貼り付けのフック

    VB.net、C#、.net framework2005で、 クリップボード拡張ソフトを開発しております。 クリップボードへの入出力が起こる直前にフックをかけたいです。 コピー・切り取り操作(ClipBoardへの入力)については クリップボードチェーンに自分を加え、WM_DRAWCLIPBOARDをハンドルすることで解決できました。 貼り付け(ClipBoardからの出力)についてはどのようにすれば実現できますでしょうか? 貼り付けイベントが起こった時に、チェーン内のプログラムにそれを通知するようなWindowsメッセージがあるかと思い、それらしいものを探してみたのですが、利用できそうなものがありませんでした… 具体的には、 ・入力時に、データを加工して仮想クリップボードに格納 ・出力時に、仮想クリップボード内のデータを再度加工して出力(貼り付け) という処理を実現したいです。 宜しくお願い致します。

  • VBでキーボードを使わずに"Ctrl+A"をしたい!

    初歩的な質問で申し訳ないのですが、VBでキーボードを使わずに、何かコマンドボタンを押した時に"Ctrl+A"などを実行したいです。VBでコーディングしていけば同じような機能は実現できるのですが、もっと簡単な方法があるような気がしてなりません・・。このボタンを押したら"Ctrl+A"を実行する、みたいなコーディングはどのようにすれば実現できるのでしょうか?

  • EXCELで値のコピーをキーボードのみで行いたい

    あるセルに数式が入っていて、そこに計算結果があったとします。そのセルをコピーして、値を別のセルに貼付けたいのですが、通常は形式を選択して「値のみ」にチェックを入れて貼り付けますが、通常のコピペのように「CTRL+C」→「CTRL+V」のように、キーボード操作のみで値のみの貼付けを行う方法はありませんか?もしくは、ツールメニューはないですか?書式コピーのツールメニューはあるのですが、値コピーは見つけられませんでした。よろしくお願いします。

  • キーボードの設定について

    (1)キーボードの1~9が、シフトとの併用ができません。( )を入力しようとしても数字が表示されてしまう。 (2)バックスペース、delete、矢印キーを長押ししてもカーソルが進まず、連打しないと続けて消せない。 (3)コピペの際、右クリックからはできるが、ctrl+c/pを使用するとc/pが表示されてしまう。 どなたか対応策をご存知ないでしょうか。

専門家に質問してみよう