本帖最后由 倚栏听风 于 2009-9-25 05:42 编辑
他妈的,太扯了。
74 不等于 0X4A
刚怀疑是不是接收上的问题,看了一下_CoProcReciver 函数
发现以下问题
实际上,处理消息的函数 是 __CoProcReciverHandler 。 它处理完以后,才交给我们定义的函数的。
不过问题不在这里
第16 行 和 第22行。
if $imsg = 0x4a then .....
他娘的,我看了一下 $IMsg的值。 一个是 74 一个是 1124
转成 16 进制可不就是 0X4A 和 0X400+0X64 嘛。
我日。 不过刚不知怎么弄的, SENDMESSAGETIMEOUT 也出错了。Func _CoProcReciver($sFunction = Default)
Local $sHandlerFuction = "__CoProcReciverHandler", $hWnd, $aTmp
If IsKeyword($sFunction) Then $sFunction = ""
$hWnd = _ProcessGetWinList(@AutoItPID, "", 16 + 2)
If Not IsHWnd($hWnd) Then
$hWnd = GUICreate("CoProcEventReciver")
If @error Then Return SetError(1, 0, False)
EndIf
If $sFunction = "" Or IsKeyword($sFunction) Then $sHandlerFuction = ""
If Not GUIRegisterMsg(0x4A, $sHandlerFuction) Then Return SetError(2, 0, False) ; WM_COPYDATA
If Not GUIRegisterMsg(0x400 + 0x64, $sHandlerFuction) Then Return SetError(2, 0, False) ; WM_USER+0x64
$gs_CoProcReciverFunction = $sFunction
Return True
EndFunc ;==>_CoProcReciver
Func __CoProcReciverHandler($hWnd, $iMsg, $WParam, $LParam)
If $iMsg = 0x4A Then ; WM_COPYDATA
Local $COPYDATA, $MyData
$COPYDATA = DllStructCreate("ptr;dword;ptr", $LParam)
$MyData = DllStructCreate("char[" & DllStructGetData($COPYDATA, 2) & "]", DllStructGetData($COPYDATA, 3))
$gv_CoProcReviverParameter = DllStructGetData($MyData, 1)
Return 256
ElseIf $iMsg = 0x400 + 0x64 Then ; WM_USER+0x64
If $gv_CoProcReviverParameter Then
Call($gs_CoProcReciverFunction, $gv_CoProcReviverParameter)
If @error And @Compiled = 0 Then MsgBox(16, "CoProc Error", "Unable to Call: " & $gs_CoProcReciverFunction)
$gv_CoProcReviverParameter = 0
Return 0
EndIf
EndIf
EndFunc ;==>__CoProcReciverHandler
|