pusofalse 发表于 2009-7-4 06:30:09

SendMessage如何截取到消息的发送者

SendMessage第一个参数指定消息的接收者,接收者在收到这条消息后,如何知道发送者是谁,来自哪个进程?谢谢。

lynfr8 发表于 2009-7-6 20:00:14

同样求解....

FBWOLF 发表于 2009-7-9 20:16:32

知道这个可就好了!进程之间可以互传消息了!

faceyao 发表于 2009-7-9 22:07:13

上英文论坛问问

pusofalse 发表于 2009-7-9 23:15:50

如果仅是进程间通信,可以自定义一个消息,明确规定wparam为发送方的PID,lparam为其他的信息。两个要通信的程序达成这种契约,接收方在收到消息后就可以知道wparam就是发送者的PID。但这只适用于自定义的消息。以下代码可以很清楚地说明我的问题。
; receiver.au3
#include <WinAPI.au3>
#include <GUITab.au3>
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Test", 300, 200)

GUICtrlCreateTab(5, 5, 290, 170)
$hTab = GUICtrlGetHandle(-1)
GUICtrlCreateTabItem("Tab 1")
GUICtrlCreateTabItem("Tab 2")
GUICtrlCreateTabItem("Tab 3")
GUICtrlSetState(-1, $GUI_SHOW)
GUICtrlCreateTabItem("")

$hCall = DllCallbackRegister("_TabProc", "int", "hWnd;uint;wparam;lparam")
$pCall = DllCallbackGetPtr($hCall)
$hOldProc = _WinAPI_SetWindowLong($hTab, -4, $pCall)

GUISetState()
Do
Until guiGetMsg() = -3

Func _TabProc($hWnd, $iMsg, $wparam, $lparam)
        If $iMsg = $TCM_GETCURSEL Then
                If Msgbox(1, '', '截取到消息,发送者的PID?') = 2 Then Return 0
        EndIf
        Return _WinAPI_CallWindowProc($hOldProc, $hWnd, $iMsg, $wparam, $lparam)
EndFunc        ;==>_TabProc()

; sender.au3
#include <GUITab.au3>

$hTab = ControlGetHandle("Test", "", "SysTabControl321")
$iCurSel = _GUICtrlTab_GetCurSel($hTab)
Msgbox(0, '', $iCurSel)

lynfr8 发表于 2009-7-9 23:21:12

先学习下,建议继续深入研究
最近天气好热...注意力很容易分散

ceoguang 发表于 2009-7-10 00:22:16

to 1#
如果非自定义的话,恐怕要HOOK才能获取吧?
btw:如何得知谁在HOOK?(或者说:如何得知某一消息或事件被HOOK?)

FBWOLF 发表于 2009-7-10 19:22:26

经常沾楼主的光,楼主是非常热心的!

pusofalse 发表于 2009-7-10 19:39:10

Re FBWOLF:
FBWOLF兄言重了,只是我们的兴趣面差不多而已。

Re ceoguang:
大概,我也觉得应该安装HOOK,但不知应该安装哪种类型的。对于HOOK始终不得其要领。如果ceoguang兄有何实现方法或思路,希望不吝赐教。

ceoguang 发表于 2009-7-15 21:42:16

to ls
关于这方面的消息,还真没想到如何去捕捉,不过,如果对VC熟悉的话可以参考下Spy++

yejier 发表于 2009-7-15 23:46:27

收藏起来备用
页: [1]
查看完整版本: SendMessage如何截取到消息的发送者