visualc 发表于 2011-2-26 11:03:58

与外部窗口移动所产生的非数组变量错误【已解决】

本帖最后由 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

飘云 发表于 2011-2-26 11:31:11

这是自然,你这个脚本命令在循环内,外部窗口如果关闭,$XY2 = WinGetPos($new)命令自然失败,返回0,那时$XY2就不是一个数组了,然后你下面来个$XY2,自然报错,你应该在WinGetPos之前增加窗口是否存在的判断,存在则进行,不存在就不进行呗

happytc 发表于 2011-2-26 11:34:26

在用$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

visualc 发表于 2011-2-26 13:31:53

回复 3# happytc

谢谢 !!!!

veve 发表于 2013-4-25 13:21:59

有没有再快一点移动的办法,外部窗口动的时候,AU3的窗口有很大的拖影,做不到一起的效果,高手出面提供下思路。
页: [1]
查看完整版本: 与外部窗口移动所产生的非数组变量错误【已解决】