与外部窗口移动所产生的非数组变量错误【已解决】
本帖最后由 visualc 于 2011-2-26 13:32 编辑请帮忙看看·如图所示,因为这个是和外部窗口移动的,关闭外部窗口,这个就出错,感谢!!
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("Form2", 392, 60,-200,-200 ,BitOR($WS_MINIMIZEBOX,$WS_POPUP,$WS_GROUP), BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE))
GUISetState(@SW_SHOW)
$new=WinWait("Panel V7.1","")
While 1
$XY = WinGetPos($Form2)
$XY2 = WinGetPos($new)
If $XY2 <> $XY Or $XY2 <> $XY then
WinMove($Form2, "", $XY2+1, $XY2+320)
WinSetOnTop('Form2','',1)
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd 这是自然,你这个脚本命令在循环内,外部窗口如果关闭,$XY2 = WinGetPos($new)命令自然失败,返回0,那时$XY2就不是一个数组了,然后你下面来个$XY2,自然报错,你应该在WinGetPos之前增加窗口是否存在的判断,存在则进行,不存在就不进行呗 在用$XY/$XY2之前,要先判断是不是数组:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form2 = GUICreate("Form2", 392, 60, -200, -200, BitOR($WS_MINIMIZEBOX, $WS_POPUP, $WS_GROUP), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
GUISetState(@SW_SHOW)
$new = WinWait("Panel V7.1", "")
While 1
$XY = WinGetPos($Form2)
$XY2 = WinGetPos($new)
If IsArray($XY) And IsArray($XY2) Then
If $XY2 <> $XY Or $XY2 <> $XY Then
WinMove($Form2, "", $XY2 + 1, $XY2 + 320)
WinSetOnTop('Form2', '', 1)
EndIf
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
回复 3# happytc
谢谢 !!!! 有没有再快一点移动的办法,外部窗口动的时候,AU3的窗口有很大的拖影,做不到一起的效果,高手出面提供下思路。
页:
[1]