laphlaw Posted March 16, 2006 Share Posted March 16, 2006 I'm trying to make a GUI that has a list of scripts to run. These scripts are all compiled as exes, and in a folder. But let's say I regularly add scripts to the folder. How would I have my GUI read the folder for the contained executables, then add them to the list? So instead of hard coding the scripts like this: GUICtrlSetData($List,"Script 1|Script2|Script 3") it dynamically reads a directory of the executables and adds it to the list. Would that be possible? Thanks Link to comment Share on other sites More sharing options...
Valuater Posted March 16, 2006 Share Posted March 16, 2006 Taken from Lesson #6 of "Welcome to Autoit 1-2-3" expandcollapse popup; includes #include <GuiConstants.au3> #include <file.au3> ;****************** FILE LOCATION ********** $File_loc = @ScriptDir & "\" $File_type = "*.txt" ;******************************************** ; create the GUI. $win = GUICreate("File List/View Demo", 614, 370) ; set the font for the GUI GUISetFont(9, 400, -1, "MS Sans Serif") ; create buttons. $btnList = GUICtrlCreateButton("&List Files", 10, 330, 75, 25) $btnView = GUICtrlCreateButton("&View File", 85, 330, 75, 25) ; create the left list. $TutorItList = GUICtrlCreateList("", 10, 10, 150, 330) ; create the right edit. $TutorItEdit = GUICtrlCreateEdit("Please select a tutorial from the list to your left.", 175, 10, 420, 345, $ES_AUTOVSCROLL + $ES_READONLY + $ES_MULTILINE + $WS_VSCROLL) ; set the edit colors. GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetColor(-1, 0x000000) ; set focus to the edit. GUICtrlSetState($TutorItList, $GUI_FOCUS) ; show the GUI. GUISetState() ; start the loop. While 1 ; listen for a message $msg = GUIGetMsg() ; using select/case for the message Select Case $msg = $GUI_EVENT_CLOSE Exit Case $msg = $btnList Set_tutor() Case $msg = $btnView View_tutor() ; end the selections EndSelect WEnd ; Function to populate the left list. Func Set_tutor() $TutList = _FileListToArray ($File_loc, $File_type, 1); list files to an array. If (Not IsArray($TutList)) Or (@error = 1) Then MsgBox(262208, "Tutor Error", "No Files\Folders Found. ", 5) Return EndIf GUICtrlSetData($TutorItList, ""); set list to empty. For $x = 1 To $TutList[0]; for loop to place the files in the list. GUICtrlSetData($TutorItList, (StringTrimRight($TutList[$x], 4)) & "|", 1); string trim the last 4 characters ( .txt ) Next EndFunc ; Function to populate the right edit. Func View_tutor() $s_text = GUICtrlRead($TutorItList); read the selected file to a variable. If $s_text = "" Then Return $n_text = StringTrimLeft($File_type, 1) $s_text = $File_loc & $s_text & $n_text; set the location of the file. Dim $Tut_text If Not _FileReadToArray($s_text, $Tut_text) Then; read the file to an array. MsgBox(4096, "Tutor Error", " Error reading log to Array error:" & @error) Return EndIf GUICtrlSetData($TutorItEdit, ""); set the edit to empty. For $x = 1 To $Tut_text[0]; for loop to place the read file into the edit. GUICtrlSetData($TutorItEdit, $Tut_text[$x] & @CRLF, 1) Next EndFunc 8) Link to comment Share on other sites More sharing options...
laphlaw Posted March 17, 2006 Author Share Posted March 17, 2006 Thanks... the only problem I ran into is the function _FileListToArray isn't included anywhere. I tried creating this function by myself, but ran into some problems along the way. My question is how do you declare a pointer in AutoIt? In C++, you use "new". Help me out! Link to comment Share on other sites More sharing options...
Valuater Posted March 17, 2006 Share Posted March 17, 2006 beta is required in SciTE Press Tools > Run Beta 8) Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted March 17, 2006 Moderators Share Posted March 17, 2006 I did this without really looking at your example Val... If it does the same thing great#include <guiconstants.au3> #include <file.au3> $MainGUI = GUICreate('Example', 200, 100) $Combo = GUICtrlCreateCombo('', 10, 10, 180, 100) $Button = GUICtrlCreateButton('Populate', 60, 60, 80, 30, $BS_DEFPUSHBUTTON) GUISetState() While 1 $msg = GUIGetMsg() If $msg = - 3 Then Exit If $msg = $Button Then $ComboInfo = _PopulateCombo(@ScriptDir, '*.exe') GUICtrlSetData($Combo, $ComboInfo) EndIf WEnd Func _PopulateCombo($hfile, $sext = '*') Local $aList = '' $avArray = _FileListToArray($hfile, $sext) For $i = 1 To UBound($avArray) - 1 $aList = $aList & $avArray[$i] & '|' Next Return StringTrimRight($aList, 1) EndFunc Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now