laphlaw Posted March 16, 2006 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
Valuater Posted March 16, 2006 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)
laphlaw Posted March 17, 2006 Author 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!
Valuater Posted March 17, 2006 Posted March 17, 2006 beta is required in SciTE Press Tools > Run Beta 8)
Moderators SmOke_N Posted March 17, 2006 Moderators 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.
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