关于GUIRegisterMsg函数的用法,看了很多遍帮助文件,并加入了MSGBOX进行实际测试,但由于加入了MSGBOX后,经常导致中断,所以测试不出来结果。
相关疑问:
1、$hWnd, $iMsg, $wParam, $lParam这几个参数,为啥不用先定义就能使用?
2、这里 $hWndFrom = $lParam,我感觉有点多余?
3、$iIDFrom = _WinAPI_LoWord($wParam) ;检索长字值的低位字.
$iCode = _WinAPI_HiWord($wParam) ;获取一个长字值的高位字.
具体怎么理解呢?
4、$EN_CHANGE = 0x300,具体表示什么意义呢?
5、$iCode = $EN_CHANGE Then,具体是什么含义呢?
6、Return $GUI_RUNDEFMSG,具体是什么含义呢?什么叫做:AutoIt 内部消息处理程序也将被执行?
请教大神,如能通俗讲解一下,非常感谢!
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ;$WM_COMMAND = 0x0111,<WindowsConstants.au3>中定义;WM_COMMAND:自定义函数名
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) ;$hWnd:出现消息的 GUI 窗口句柄;$iMsg:Windows 消息 ID;十六进制值的第一个消息参数;$lParam:十六进制值的第二个消息参数.
Local $hWndFrom, $iIDFrom, $iCode
$hWndFrom = $lParam
$iIDFrom = _WinAPI_LoWord($wParam) ;检索长字值的低位字.
$iCode = _WinAPI_HiWord($wParam) ;获取一个长字值的高位字.
If $iCode = $EN_CHANGE Then ;$EN_CHANGE = 0x300,<EditConstants.au3>中定义。
For $i = 0 To 7
If $iIDFrom = $Input[$i] Then
Local $t1, $t2, $f, $fx, $t3, $t4
If Mod($i, 2) = 0 Then
$f = $i + 1
$t1 = StringStripWS(GUICtrlRead($Input[$i]), 3)
$t2 = StringStripWS(GUICtrlRead($Input[$f]), 3)
$fx = GUICtrlRead($Label[$i / 2])
Else
$f = $i - 1
$t1 = StringStripWS(GUICtrlRead($Input[$f]), 3)
$t2 = StringStripWS(GUICtrlRead($Input[$i]), 3)
$fx = GUICtrlRead($Label[$f / 2])
EndIf
For $j = 0 To 7
If $j <> $i And $j <> $f Then
If $t1 = "" And $t2 = "" Then
GUICtrlSetState($Input[$j], $GUI_ENABLE)
Else
GUICtrlSetState($Input[$j], $GUI_DISABLE)
EndIf
EndIf
Next
If $t1 = "" Or $t2 = "" Then
_GUICtrlListView_DeleteAllItems_($lv)
If $t1 <> "" Or $t2 <> "" Then
_GUICtrlStatusBar_SetText($hStatus, " 等待输入完成...")
Else
_GUICtrlStatusBar_SetText($hStatus, "")
EndIf
Else
_GUICtrlStatusBar_SetText($hStatus, "")
_GetResult($fx, $t1, $t2)
EndIf
ExitLoop
EndIf
Next
EndIf
Return $GUI_RUNDEFMSG;如果关键字Return与常量参数$GUI_RUNDEFMSG(可以在包含文件 GUIConstantsEx.au3 中找到)一起使用, 则 AutoIt 内部消息处理程序也将被执行.
EndFunc ;==>WM_COMMAND
|