Kddonelson Posted April 2, 2009 Share Posted April 2, 2009 I see how to put *.exe's into an array from a earlier post, but now I am trying to execute the list with a runwait, I think in some sort of loop, right??? I'd also love to be able to time it out if the runwait takes longer than a certain amount of time (1 hr-ish). Any help is greatly appreciated. #include <array.au3> Dim $aFiles[101];I dont thnik you'll be needing mroe than 100 exes'? $aFiles[0] = 0 $hFileSearch = FileFindFirstFile("C:\Documents and Settings\admin\My Documents\autoit\*.exe") while 1 $sFileToAdd = FileFindNextFile($hFileSearch) If @error = 1 Then ExitLoop EndIf $aFiles[0]+=1 $aFiles[$aFiles[0]] = $sFileToAdd WEnd ;_ArrayDisplay($aFiles) While $aFiles = > $aFileToAdd runwait( $aFiles ) $aFiles[1] +1 Wend yeah, i'm also learning how to post...notice the nice code box. Thanks to all! KDD Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 2, 2009 Moderators Share Posted April 2, 2009 Kddonelson,A few points to help you figure out arrays. :-)1. If you include Array.au3, you might as well use the functions within....so use _ArrayAdd to automatically size your array as you go along. If you know you have a LOT of elements this is bad practice as it uses a lot of CPU, but if you are limiting the elements to about 100 it is not too resource hungry.2. You can define elements of an array when you declare it.3. Use the index to identify elements within the array.4. Nothing to do with arrays, but do close the search handle when you use FileFindFirstFile....So your code is modified thus (numbers indicate the points above):#include <array.au3> Global $aFiles[1] = [0] <<<< 2 _ArrayDisplay($aFiles) $hFileSearch = FileFindFirstFile("M:\Downloads\*.exe") If $hFileSearch > 0 Then while 1 $sFileToAdd = FileFindNextFile($hFileSearch) If @error Then ExitLoop _ArrayAdd($aFiles, $sFileToAdd) <<<< 1 $aFiles[0]+=1 _ArrayDisplay($aFiles) WEnd EndIf FileClose($hFileSearch) <<<< 4 For $i = 1 To $aFiles[0] RunWait($aFiles[$i]) <<<< 3 NextI have left in a lot of _ArrayDisplays so you can see what is going on - you can delete them once you are happy. I hope it is all clear - ask again if not.M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Kddonelson Posted April 2, 2009 Author Share Posted April 2, 2009 Kddonelson, A few points to help you figure out arrays. :-) 1. If you include Array.au3, you might as well use the functions within....so use _ArrayAdd to automatically size your array as you go along. If you know you have a LOT of elements this is bad practice as it uses a lot of CPU, but if you are limiting the elements to about 100 it is not too resource hungry. 2. You can define elements of an array when you declare it. 3. Use the index to identify elements within the array. 4. Nothing to do with arrays, but do close the search handle when you use FileFindFirstFile.... So your code is modified thus (numbers indicate the points above):#include <array.au3> Global $aFiles[1] = [0] <<<< 2 _ArrayDisplay($aFiles) $hFileSearch = FileFindFirstFile("M:\Downloads\*.exe") If $hFileSearch > 0 Then while 1 $sFileToAdd = FileFindNextFile($hFileSearch) If @error Then ExitLoop _ArrayAdd($aFiles, $sFileToAdd) <<<< 1 $aFiles[0]+=1 _ArrayDisplay($aFiles) WEnd EndIf FileClose($hFileSearch) <<<< 4 For $i = 1 To $aFiles[0] RunWait($aFiles[$i]) <<<< 3 Next I have left in a lot of _ArrayDisplays so you can see what is going on - you can delete them once you are happy. I hope it is all clear - ask again if not. M23 M23, That works perfectly. The displays helped, very cool. I hesitate to get too greedy with the questions, but do you have a suggestion for timing out the *.exe if it hangs or runs on too long? I read the helpfile on runwait and I didn't see anything about time. At any rate, you are wonderful! I hope to return the favor to newbies and such when I'm capable. Thanks a million, KDD Link to comment Share on other sites More sharing options...
Kddonelson Posted April 3, 2009 Author Share Posted April 3, 2009 Would anyone have a suggestion for how to cause a script to continue on if an *.exe that was called by the script hangs and the desired effect is to execute the remaining *.exe's. Thanks for looking!M23,That works perfectly. The displays helped, very cool. I hesitate to get too greedy with the questions, but do you have a suggestion for timing out the *.exe if it hangs or runs on too long? I read the helpfile on runwait and I didn't see anything about time. At any rate, you are wonderful! I hope to return the favor to newbies and such when I'm capable. Thanks a million,KDD Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 3, 2009 Moderators Share Posted April 3, 2009 Kddonelson,A bit of searching on the forum (Hint: useful tip!) produced this:; finding if an application is hung ; neogia If _NotResponding("TITLE HERE", "TEXT HERE[OPTIONAL]", 1) Then ; The last parameter indicates whether you want to close the hung app or not. MsgBox(0,"", "Hung Application, closing app now.") Else MsgBox(0,"", "Application running as intended.") EndIf Func _NotResponding($title, $text, $closeIfHung = 0) $hWnd = WinGetHandle($title, $text) If $hWnd == "" Then MsgBox(0,"Error","Could not find window") Exit EndIf $retArr = DllCall("user32.dll", "int", "IsHungAppWindow", "hwnd", $hWnd) If @error == 0 Then If $retArr[0] == 1 Then If $closeIfHung Then ProcessClose(WinGetProcess($title, $text)) EndIf Return 1 EndIf Else Return 0 EndIf EndFuncI am sure you can develop that to meet your requirements - have you looked at Adlib yet?M23P.S. Please use the "Add Reply" rather than the "Reply" button. It is only about 1cm lower on the page and that way you do not repeat everything in the previous post. :-) Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Kddonelson Posted April 3, 2009 Author Share Posted April 3, 2009 M23, I did read up on adlib. I think it might be able to help me, but I was hoping it was easier than having to write my own function. I'm out of town and offline for the weekend. I just wanted to give a quick reply before I go. Thanks again for you input, KDD Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 6, 2009 Moderators Share Posted April 6, 2009 Kddonelson,As requested:expandcollapse popup#include <array.au3> ; List .exe files in folder Global $aFiles[1] = [0] $hFileSearch = FileFindFirstFile("Your_Path\*.exe") If $hFileSearch > 0 Then while 1 $sFileToAdd = FileFindNextFile($hFileSearch) If @error Then ExitLoop _ArrayAdd($aFiles, $sFileToAdd) $aFiles[0]+=1 WEnd EndIf FileClose($hFileSearch) ; Initialise Adlib to run "Is_Hung" every 10 secs - just adjust as you wish AdlibEnable("_Is_Hung", 10000) ; Run .exe files in order For $i = 1 To $aFiles[0] ; Clear WinTitle flag Global $sTitle = "" ; Run file and wait until ended $iPID = RunWait($aFiles[$i]) Next Exit ; Adlib function - based on code by neogia Func _Is_Hung() ; If WinTitle flag not set - get window title and so handle If $sTitle = "" Then $sTitle= _GetWinTitleFromProcName($aFiles[$i]) $hWnd = WinGetHandle($sTitle, "") ; If no handle - window probably not yet initialised If $hWnd == "" Then Return ; Check if hung $retArr = DllCall("user32.dll", "int", "IsHungAppWindow", "hwnd", $hWnd) ; If hung, close process If @error = 0 And $retArr[0] = 1 Then ProcessClose(WinGetProcess($sTitle, "")) EndFunc ;==>_Is_Hung ; Code by SpookMeister Func _GetWinTitleFromProcName($s_ProcName) $pid = ProcessExists($s_ProcName) $a_list = WinList() For $i = 1 To $a_list[0][0] If $a_list[$i][0] <> "" Then $pid2 = WinGetProcess($a_list[$i][0]) If $pid = $pid2 Then Return $a_list[$i][0] EndIf Next EndFunc ;==>_GetWinTitleFromProcNameThe code runs perfectly if the .exes terminate normally or if you close an .exe prematurely. But I cannot guarantee the IsHungAppWindow code - although as I found it in Valuater's Wrappers thread I am fairly confident that it does work. I have not yet developed a way to hang an application at will, although enough seem to do it whenever they want to!M23P.S. As for tutorials, have you looked here and here? Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Kddonelson Posted April 6, 2009 Author Share Posted April 6, 2009 M23, I'm sorry to be so much trouble. Your solution uses windows controls and stuff which looks great, but the *.exe's I'm trying to kill if too much time has passed and they hang are running in a flash environment. Although I'm very new to this, I don't think I can do window handles and such. I'm executing the *.exe's from a harness script: expandcollapse popupWhile 1 $msg = GUIGetMsg() If $msg = -3 Then Exit;exit if press close. If $msg = $b1 Then do_stuff();perform function 'do_stuff()' if you click the button. WEnd Func do_stuff() If GUICtrlRead($cb1) = 1 Then do_cb1();These 3 lines read the checkboxes and perform a function if they are checked off. If GUICtrlRead($cb2) = 1 Then do_cb2();Returns value 1 for checked and value 4 for unchecked. If GUICtrlRead($cb3) = 1 Then do_cb3();You can manipulate these 'if' statements however you need them to work. If GUICtrlRead($cb4) = 1 Then do_cb4() If GUICtrlRead($cb5) = 1 Then do_cb5() If GUICtrlRead($cb6) = 1 Then do_cb6() EndFunc ;==>do_stuff Func do_cb1() ShellExecute("C:\Documents and Settings\admin\My Documents\autoit\a_6.1_testing_admin_create_user.exe") Func _Timer_Init() _Timer_Diff() > 6000 Endfunc processclose( "winword.exe" ) EndFunc ;==>do_cb1 Func do_cb2() MsgBox(0, '', '2') EndFunc ;==>do_cb2 Func do_cb3() MsgBox(0, '', '3') EndFunc ;==>do_cb3 Func do_cb4() ShellExecuteWait("C:\Documents and Settings\admin\My Documents\autoit\a_LMS_test.exe") EndFunc ;==>do_cb4 Func do_cb5() MsgBox(0, '', '5') EndFunc ;==>do_cb5 Func do_cb6() MsgBox(0, '', '6') EndFunc ;==>do_cb6 I've been trying to control the process from inside each individual script.exe instead of from the harness. It hit me a little while ago that I just need a timer telling the script to move on to the next checkbox after a certain amount of time. This is my first WAG at it. If GUICtrlRead($cb5) = 1 Then do_cb5() If GUICtrlRead($cb6) = 1 Then do_cb6() EndFunc ;==>do_stuff Func do_cb1() ShellExecute("C:\Documents and Settings\admin\My Documents\autoit\a_6.1_testing_admin_create_user.exe") Func _Timer_Init() _Timer_Diff() > 600000 ; some sort of timing mech? when it kicks out then processclose Endfunc processclose( "winword.exe" ); this is the application that I'm using for a logfile. processclose( "a_6.1_testing_admin_create_user.exe") EndFunc ;==>do_cb1 Func do_cb2() MsgBox(0, '', '2') EndFunc ;==>do_cb2 I will search for a compact little timer in the example scripts to see what I can come up with to trigger the processcloses. Does it sound like I'm on the right track? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 6, 2009 Moderators Share Posted April 6, 2009 (edited) Kddonelson,Here is a snippet showing how you might use TimerInit and TimerDiff in your function:Func do_cb1() ; Start the application ShellExecute("C:\Documents and Settings\admin\My Documents\autoit\a_6.1_testing_admin_create_user.exe") ; Set timestamp $ibegin = _Timer_Init() ; Start an infinite loop While 1 ; If process has closed by itself exit the loop If Not ProcessExists("a_6.1_testing_admin_create_user.exe") Then ExitLoop ; If we reach timer limit, end process and exit the loop If _Timer_Diff($iBegin) > 600000 Then ProcessClose( "a_6.1_testing_admin_create_user.exe") ExitLoop EndIf WEnd ; Close Word because the other process has ended in some fashion! ProcessClose( "winword.exe" ) EndFunc;==>do_cb1I have tried to cover all the bases by adding a check to see if the app has finished normally before the timer runs out.M23Edit: Missed a line - sorry! Edited April 6, 2009 by Melba23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Kddonelson Posted April 6, 2009 Author Share Posted April 6, 2009 Thanks again M23! I think I am there. Look at this slight variation from your snippet. It seems to work the way I'm hoping. I tested it with a 60 sec timeout. It appears to work. Now I have to adjust 42 versions of it for each separate *.exe. I'm certain there is a way to make a function to do it, but I'm wore out for the day. Let me know what you think. As always, very grateful. BTW, am I responding/replying correctly? Seems a bit strange, but I'm also a newbie to forums as well. I left a little code on each side of the timer just for your reference. You can see the old func and new with timeout feature (a la M23): expandcollapse popupIf GUICtrlRead($cb46) = 1 Then do_cb46() If GUICtrlRead($cb47) = 1 Then do_cb47() If GUICtrlRead($cb48) = 1 Then do_cb48() EndFunc ;==>do_stuff ;------------------------------------------------------------------------------------------------------- Func do_cb1() ; Start the application ShellExecute("C:\Documents and Settings\admin\My Documents\autoit\s_a_UNM14_e_w.exe") ; Set timestamp $ibegin = _Timer_Init() ; Start an infinite loop While 1 ; If process has closed by itself exit the loop If Not ProcessExists("s_a_UNM14_e_w.exe") Then ExitLoop ; If we reach timer limit, end process and exit the loop If _Timer_Diff($iBegin) > 60000 Then ExitLoop WEnd ProcessClose( "s_a_UNM14_e_w.exe") ;training module ProcessClose( "ATS-System.exe" ) ;training player ProcessClose( "winword.exe" ) ;log file EndFunc;==>do_cb1 ;------------------------------------------------------------------------------------------------------- Func do_cb2() ShellExecuteWait("C:\Documents and Settings\admin\My Documents\Autoit\s_a_UNM14_e_x.exe") EndFunc ;------------------------------------------------------------------------------------------------------- Func do_cb3() ShellExecuteWait("C:\Documents and Settings\admin\My Documents\Autoit\s_a_UNM14_e_y.exe") EndFunc Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 6, 2009 Moderators Share Posted April 6, 2009 Kddonelson,Do I take it from your earlier post that you are choosing which .exes to run by checking a number of checkboxes from a list? If so then the function to run them one after the other should be pretty easy to code - particularly if you have them in an array.I see how to put *.exe's into an array from a earlier post, but now I am trying to execute the listI will have a think and post something for you to look at tomorrow.M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 6, 2009 Moderators Share Posted April 6, 2009 Kddonelson, Look at this. I think it should be pretty close:expandcollapse popup#include <GUIConstantsEx.au3> #include <Array.au3> #Include <Timers.au3> ; Get the list of .exe files (or training modules or whatever) Global $aExe_Files[1] = [0] $hFileSearch = FileFindFirstFile("Your_Path\*.exe") If $hFileSearch > 0 Then while 1 $sFileToAdd = FileFindNextFile($hFileSearch) If @error Then ExitLoop _ArrayAdd($aExe_Files, $sFileToAdd) $aExe_Files[0]+=1 WEnd EndIf FileClose($hFileSearch) ; Create a GUI GUICreate("Test", 500, 500) ; Create the correct number of checkboxes Global $aChk_Box[$aExe_Files[0] + 1] For $i = 1 To $aExe_Files[0] ; Coords will need to be adjusted depending on the number of checkboxes $aChk_Box[$i] = GUICtrlCreateCheckbox($aExe_Files[$i], 10, 10 + (20 * $i), 200, 20) Next ; Create a "Do It" button $hButton = GUICtrlCreateButton("Do It", 10, 450, 80, 30) GUISetState() ; Wait for user input While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $hButton ExitLoop EndSwitch WEnd ; Now run through the check boxes to see which modules have been selected For $i = 1 To $aExe_Files[0] ; If checkbox is ticked run associated .exe If GUICtrlRead($aChk_Box[$i]) = $GUI_CHECKED Then _Run_Exe($i) Next Exit Func _Run_Exe($iIndex) ; Based on your closure of "training player" and "winword" as each app terminates, I presume you need to start them! ShellExecute("Path\winword.exe") ShellExecute("Path\ATS-System.exe") ; Then the training module iself ShellExecute("Your_Path\" & $aExe_Files[$iIndex]) ; Set timestamp $ibegin = _Timer_Init() ; Start an infinite loop While 1 ; If process has closed by itself exit the loop If Not ProcessExists($aExe_Files[$iIndex]) Then ExitLoop ; If we reach timer limit, exit the loop If _Timer_Diff($iBegin) > 60000 Then ExitLoop WEnd ; Close the open apps ProcessClose($aExe_Files[$iIndex]);training module ProcessClose("ATS-System.exe") ;training player ProcessClose("winword.exe") ;log file EndFunc M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Kddonelson Posted April 6, 2009 Author Share Posted April 6, 2009 yes, running *.exe's from a list of checkboxes in a simple GUI. when they don't make it all the way through the test, i now have the harness move on to the next - i hope. attached a picture of the harness. i'm going to add an icon of the companies. would be fun to put a semi transparent overlay of the logo....hmm...a challenge for further down the road. kdd Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 6, 2009 Moderators Share Posted April 6, 2009 Kddonelson, Posts crossed. Just get your checkbox ControlIDs into an array as in my post above and you should be good to go! M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area 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