Jump to content
Sign in to follow this  
Kddonelson

Attempting to figure out arrays

Recommended Posts

Kddonelson

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

Share this post


Link to post
Share on other sites
Melba23

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


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Kddonelson

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

Share this post


Link to post
Share on other sites
Kddonelson

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

Share this post


Link to post
Share on other sites
Melba23

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
EndFunc

I am sure you can develop that to meet your requirements - have you looked at Adlib yet?

M23

P.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._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Kddonelson

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

Share this post


Link to post
Share on other sites
Melba23

Kddonelson,

As requested:

#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  ;==>_GetWinTitleFromProcName

The 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!

M23

P.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._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Kddonelson

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:

While 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?

Share this post


Link to post
Share on other sites
Melba23

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_cb1

I have tried to cover all the bases by adding a check to see if the app has finished normally before the timer runs out.

M23

Edit: Missed a line - sorry!

Edited by Melba23

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Kddonelson

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):

If 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

Share this post


Link to post
Share on other sites
Melba23

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 list

I 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._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Melba23

Kddonelson,

Look at this. I think it should be pretty close:

#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._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Kddonelson

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. :D 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

post-44166-1239054066_thumb.jpg

Share this post


Link to post
Share on other sites
Melba23

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._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.