我有一个GUI,它记录了文件夹中所有chm的列表。当点击RUN按钮时,它将打开列表中的第一个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
代码有很多问题。
- 检查你的标题!在两种情况下,您在示例中获得了错误的窗口标题拼写。AutoIt用小写的t拼写,并且窗口标题匹配是区分大小写的,除非你另外设置了一个选项。
- 如果没有找到"教程",那么你将永远循环。你应该在
_GUICtrlTreeView_GetNextChild
之后添加一个检查,看看你是否已经到达树视图的末端。
但是代码的真正问题是,在运行创建窗口的进程之前,您在代码的开头设置了$hWnd
和$hChild
。因此,没有找到窗口,因此当您调用_Expand
时,$hWnd将始终为NULL。
这类问题在stackoverflow上不被鼓励。我们喜欢将来对其他人有用的问题,而不是帮助特定的代码。在将来提出类似问题之前,请尝试自己调试问题。您可以通过显示变量值的代码添加ConsoleWrite
语句,这将向您显示,当您输入expand时,$hWnd
没有句柄值,从那里可以看出。