自动:创建功能?

时间:2013-06-21 07:57:46

标签: autoit

我有一个GUI,用于记录文件夹中所有chm的列表。单击“运行”按钮时,它将打开列表中的第一个chm,直到此为止。然后我创建了一个应该扩展树的函数。

我的问题是我的功能,它一直工作到MsgBox()并停在那里。当我运行我的程序时,没有指出错误。

#include <GuiConstantsEx.au3>
#include <GuiListBox.au3>
#include <GuiTreeView.au3>
#include <File.au3>
#include <Array.au3>

;GUI
$guiTitle = "Automation"
GUICreate($guiTitle, 250, 430)

Global $hWnd = ControlGetHandle("[CLASS:HH Parent;TITLE:AutoIt Help]", "", "[CLASS:SysTreeView32; INSTANCE:1]")
Global $hChild = _GUICtrlTreeView_GetFirstChild($hWnd, 0)
Local $source = InputBox("Source Folder","Please enter the source folder","")

;InputBox
If @error = 1 Then
   Exit
EndIf

If @error = 4 Then
   Exit
;GUI_List
Else

   $add = GUICtrlCreateButton("Show", 10, 53, 230, 20)
   $picList = GUICtrlCreateList("", 10, 78, 230, 300)
   $run = GUICtrlCreateButton("Run", 170, 385, 70, 30)

   GUISetState(@SW_SHOW)



   While 1
       $msg = GUIGetMsg()
       Switch $msg
            ;add
           Case $add
               Global $FileList = _FileListToArray($source, "*.chm")
               If @error = 1 Then
                   MsgBox(0, "", "No Files Found.")
                   Exit
               EndIf
               If @error = 4 Then
                   MsgBox(0, "", "No Files Found.")
                   Exit
               EndIf

               For $i = 1 To $FileList[0] ;List_IFIX Pictures
                   GUICtrlSetData($picList, $FileList[$i])
                Next

            ;run
           Case $run
               If _GUICtrlListBox_GetCount($picList) = 0 Then
                      MsgBox(0, "", "No Files Found.")

                   Else 
                     For $i = 1 To $FileList[0]
                        If Not WinExists("AutoIT Help]") Then
                           ShellExecute($source & "\" & $FileList[1])
                           _Expand($hWnd, $hChild)
                        EndIf
                        Next
               EndIf

            ;exit
           Case $GUI_EVENT_CLOSE
               ExitLoop
       EndSwitch
   WEnd
EndIf

这是我的功能:

Func _Expand($hWnd, $hChild)
   WinWaitActive("AutoIT Help")
   MsgBox(0,"","Expand")


   While 1
       $hChild = _GUICtrlTreeView_GetNextChild($hWnd, $hChild)
       If _GUICtrlTreeView_GetText($hWnd, $hChild) = "Tutorials" Then ExitLoop
   WEnd

   _GUICtrlTreeView_Expand(ControlGetHandle("[CLASS:HH Parent;TITLE:AutoIt Help]","", "[CLASS:SysTreeView32; INSTANCE:1]"),$hchild, True)
 EndFunc

1 个答案:

答案 0 :(得分:1)

代码存在很多问题。

  1. 检查你的头衔!在两种情况下,您的示例中的窗口标题拼写错误。 AutoIt拼写为小写 t ,除非您另外设置选项,否则窗口标题匹配区分大小写。
  2. 如果找不到“Tutorials”,那么你将永远循环。您应该在_GUICtrlTreeView_GetNextChild之后添加一个检查,以查看您是否已到达树视图的末尾。
  3. 但是代码的真正问题在于,在运行创建窗口的过程之前,您在代码的开头设置了$hWnd$hChild。因此,找不到窗口,因此当您致电_Expand时,$ hWnd将始终为NULL。

    stackoverflow不鼓励这类问题。我们喜欢将来对其他人有用的问题,而不是特定代码的帮助。在将来问这样的问题之前,请自己尝试调试问题。您可以通过显示变量值的代码添加ConsoleWrite语句,这会在您输入展开时向您显示$hWnd没有句柄值,从那里很明显。