アプリ版:「スタンプのみでお礼する」機能のリリースについて

SetWindowsHookExでグローバルフックして
メッセージをすりかえる事って可能でしょうか?
例えばWM_KEYDOWNが送られてきたら、それを無視して
WM_CLOSEとかえるといった具合に。

試しにWH_CALLWNDPROCで受け取ったメッセージを
書き換えるだけでは無理でした(WindowsXp SP2)

MSDNのWH_CALLWNDPROCRETの関数CallWndRetProcの説明で
「このフックプロシージャは、メッセージを調べることはできますが、変更することはできません。」
となっていました。
ということはWH_CALLWNDPROCのCallWndProcでは変更できるのかな?と思った次第です。

何か情報があれば宜しくお願いします。
(2000では不可だけど98だとできるとか?)

A 回答 (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/
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
「Advanced Windows」は手元にあったりしますが、
これを機会によく目を通してみようと思います。
URLも大変参考になりました。

お礼日時:2005/04/25 16:01

用途が違いますね。



>例えばWM_KEYDOWNが送られてきたら、それを無視して

特に、WM_KEYDOWNのようにPostされるものはWH_GETMESSAGEで無視することは可能です。

ちなみにWH_CALLWNDPROCでは取得すらできません。


Sendで送られるメッセージもすり替えはたい場合はウィンドウのサブクラス化でしょう。
ただし、DLLを対象のプロセスに突っ込む荒業が必要ですが。
    • good
    • 0
この回答へのお礼

いつもご回答くださり有難うございます。

>ちなみにWH_CALLWNDPROCでは取得すらできません。
すみません。取得出来ませんね。理解不足でした。
ところでspy++でいう
WH_GETMESSAGEがP「ポストしたメッセージ」
WH_CALLWNDPROCがS「送出するメッセージ」
WH_CALLWNDPROCRETがR「送出したメッセージの戻り値」
にあたるということになるのでしょうか?

>Sendで送られるメッセージもすり替えはたい場合はウィンドウのサブクラス化でしょう。
>ただし、DLLを対象のプロセスに突っ込む荒業が必要ですが。
サブクラス化はdllも同じプロセスに属す必要があるんですね。
この方法についてどこか参考になるサイト、あるいは書籍ってありますか?

お礼日時:2005/04/25 13:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A