SetWindowsHookExでグローバルフックして
メッセージをすりかえる事って可能でしょうか?
例えばWM_KEYDOWNが送られてきたら、それを無視して
WM_CLOSEとかえるといった具合に。
試しにWH_CALLWNDPROCで受け取ったメッセージを
書き換えるだけでは無理でした(WindowsXp SP2)
MSDNのWH_CALLWNDPROCRETの関数CallWndRetProcの説明で
「このフックプロシージャは、メッセージを調べることはできますが、変更することはできません。」
となっていました。
ということはWH_CALLWNDPROCのCallWndProcでは変更できるのかな?と思った次第です。
何か情報があれば宜しくお願いします。
(2000では不可だけど98だとできるとか?)
No.2ベストアンサー
- 回答日時:
>WH_GETMESSAGEがP「ポストしたメッセージ」
>WH_CALLWNDPROCがS「送出するメッセージ」
>WH_CALLWNDPROCRETがR「送出したメッセージの戻り値」
というか、対象のウィンドウプロシージャにおいて、
P:PostMessageで受け取ったメッセージ
S:SendMessageで受け取ったメッセージ
R:SendMessageの受け取ったときのプロシージャの戻り値
と考えたほうがわかりやすいかと。
#RがSendMessageのみなのは、呼び出し元がPostMessageのときは終了を待たないため。
>>Sendで送られるメッセージもすり替えはたい場合はウィンドウのサブクラス化でしょう。
>>ただし、DLLを対象のプロセスに突っ込む荒業が必要ですが。
>サブクラス化はdllも同じプロセスに属す必要があるんですね。
>この方法についてどこか参考になるサイト、あるいは書籍ってありますか?
ここらへんかな?
http://www.microsoft.com/japan/info/press/JPN_Vi …
http://ruffnex.oc.to/kenji/text/api_hook/
ご回答ありがとうございます。
「Advanced Windows」は手元にあったりしますが、
これを機会によく目を通してみようと思います。
URLも大変参考になりました。
No.1
- 回答日時:
用途が違いますね。
>例えばWM_KEYDOWNが送られてきたら、それを無視して
特に、WM_KEYDOWNのようにPostされるものはWH_GETMESSAGEで無視することは可能です。
ちなみにWH_CALLWNDPROCでは取得すらできません。
Sendで送られるメッセージもすり替えはたい場合はウィンドウのサブクラス化でしょう。
ただし、DLLを対象のプロセスに突っ込む荒業が必要ですが。
いつもご回答くださり有難うございます。
>ちなみにWH_CALLWNDPROCでは取得すらできません。
すみません。取得出来ませんね。理解不足でした。
ところでspy++でいう
WH_GETMESSAGEがP「ポストしたメッセージ」
WH_CALLWNDPROCがS「送出するメッセージ」
WH_CALLWNDPROCRETがR「送出したメッセージの戻り値」
にあたるということになるのでしょうか?
>Sendで送られるメッセージもすり替えはたい場合はウィンドウのサブクラス化でしょう。
>ただし、DLLを対象のプロセスに突っ込む荒業が必要ですが。
サブクラス化はdllも同じプロセスに属す必要があるんですね。
この方法についてどこか参考になるサイト、あるいは書籍ってありますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(買い物・ショッピング) 壁掛け金具の内容について 1 2022/05/30 21:52
- livedoor Blog(ライブドアブログ) LINEに下記メッセージが届きました。 ブログリーダーに登録した事はありませんし、利用もしてません。 1 2023/02/28 16:33
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- 戦争・テロ・デモ ロシアは世界に向けて強いメッセージを送るべきではないでしょうか? 6 2022/06/25 00:42
- Android(アンドロイド) ショートメッセージがAndroidのみ送受信できない 5 2023/01/02 12:50
- LINE LINEのスマホ機種変更時の移行失敗の復旧 1 2022/06/20 14:52
- その他(恋愛相談) 明日会う約束をしてるのだが… 2 2023/05/06 17:03
- テレビ テレビ壁寄せスタンドの転倒防止方法は? 1 2022/04/17 23:11
- VPN 接続のたびにIPが変わるVPNサービスが知りたい 2 2022/06/27 02:34
- 大学・短大 続報 以前大学編入後に生じた問題から、こちらに質問 させていただいたものです。 詳しくご存知ない方に 1 2023/06/24 15:19
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでコントロールのハンドルを...
-
キーボードフックについて
-
vbaから他のアプリを終了
-
VBでのハンドルの使い方
-
WM_NCLBUTTONUPについて
-
CloseHandle()
-
ウインドウの位置を知る。
-
VB.netでFindWindowExやると・...
-
メッセージボックスの選択ボタ...
-
他のウィンドウのボタンを自動...
-
msgboxの表示位置
-
グラフの交点の求め方(Excel)
-
エクセルで作った新しいウイン...
-
マインクラフト(pc版)で座標...
-
勝手にウィンドウが開いて止ま...
-
「アイテムは収集されました」...
-
フォントの大きさ
-
コントロールの書式設定で、“コ...
-
VBAのフォント変更(エクセルか...
-
エクセルである点からの距離で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
msgboxの表示位置
-
VBAでコントロールのハンドルを...
-
メッセージハンドラ
-
SetWindowText関数について
-
WM_NCLBUTTONUPについて
-
VB.netでFindWindowExやると・...
-
デスクトップ上のアイコンの位...
-
点滅で知らせる方法
-
SendMessage で ESC など
-
チェックボックスのキーダウン...
-
キーボード・フックのアプリを...
-
マウスフックについて
-
DEVICECHANGE() の受け取り
-
CloseHandle()
-
システム例外のメッセージを変...
-
VB6でシャットダウン、ログオフ...
-
Excel VBA で外部アプリケーシ...
おすすめ情報