-1

フォルダー内のすべての chm のリストを記録する GUI があります。「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
4

1 に答える 1

1

コードの問題が多い。

  1. タイトルをチェック!2 つのケースでは、例のウィンドウ タイトルのスペルが間違っています。AutoIt は小文字のtでつづられ、ウィンドウ タイトルの一致は、別のオプションを設定しない限り、大文字と小文字が区別されます。
  2. 「チュートリアル」が見つからない場合は、永遠にループします。_GUICtrlTreeView_GetNextChildツリービューの最後に到達したかどうかを確認するために、チェックを追加する必要があります。

しかし、コードの本当の問題は、ウィンドウを作成するプロセスを実行する前に、コードの先頭で$hWndandを設定していることです。$hChildその結果、ウィンドウが見つからないため、 を呼び出すと $hWnd は常に NULL になります_Expand

この種の質問は、stackoverflow では推奨されません。私たちは、特定のコードに関する質問よりも、将来他の人に役立つ質問を好みます。今後このような質問をする前に、自分で問題をデバッグしてみてください。ConsoleWrite変数値を示すコードを介してステートメントを追加できます$hWnd。これは、expand に入ったときにハンドル値がないことを示していたはずです。そこから明らかです。

于 2013-06-21T10:41:00.300 に答える