행위

"Autoit 스니펫"의 두 판 사이의 차이

DB CAFE

(새 문서: __TOC__ category:autoit == _1Dto2DArray == <source lang = "autoit"> #include <Array.au3> Global $aArray_1D[2] = ["Data", "Data"] _ArrayDisplay($aArray_1D) _1Dto2DArray($aArr...)
 
 
2번째 줄: 2번째 줄:
  
 
[[category:autoit]]
 
[[category:autoit]]
 +
 +
== AutoItWinShow ==
 +
 +
<source lang="autoit">
 +
#include <GUIConstantsEx.au3>
 +
 +
Example()
 +
 +
Func Example()
 +
    ; Display AutoIt's Hidden Window. See AutoItWinGetTitle and AutoItWinSetTitle for more details.
 +
    AutoItWinShow()
 +
 +
    While 1
 +
        Switch GUIGetMsg()
 +
            Case $GUI_EVENT_CLOSE
 +
                ExitLoop
 +
        EndSwitch
 +
    WEnd
 +
EndFunc  ;==>Example
 +
 +
; Display AutoIt's Hidden Window. Returns the handle of the window.
 +
Func AutoItWinShow()
 +
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
 +
    WinMove($hWnd, '', (@DesktopWidth / 2) - 250, (@DesktopHeight / 2) - 250, 500, 500) ; Move the AutoIt Hidden Window and re-size for a better view of the data that will be set.
 +
    WinSetState($hWnd, '', @SW_SHOW) ; Show the AutoIt Hidden Window, normally this is hidden, but in the interest of this example I'm displaying it.
 +
    Return $hWnd
 +
EndFunc  ;==>AutoItWinShow
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== AutoItWinGetText ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
Example()
 +
 +
Func Example()
 +
    ; Display AutoIt's Hidden Window. See AutoItWinGetTitle and AutoItWinSetTitle for more details.
 +
    AutoItWinShow()
 +
 +
    ; Add a text string to AutoIt's Hidden Window. Compile to see the text in AutoIt's Hidden Window.
 +
    AutoItWinSetText('Welcome to AutoIt V' & @AutoItVersion & @CRLF)
 +
 +
    ; Add a text string to AutoIt's Hidden Window. Compile to see the text in AutoIt's Hidden Window.
 +
    AutoItWinSetText('Windows Type: ' & @OSType & @CRLF)
 +
 +
    ; Display the text stored in AutoIt's Hidden Window.
 +
    MsgBox(4096, '', AutoItWinGetText())
 +
 +
    While 1
 +
        Switch GUIGetMsg()
 +
            Case $GUI_EVENT_CLOSE
 +
                ExitLoop
 +
        EndSwitch
 +
    WEnd
 +
EndFunc  ;==>Example
 +
 +
; Retrieve the text in AutoIt's Hidden Window.
 +
Func AutoItWinGetText()
 +
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
 +
    Return ControlGetText($hWnd, '', ControlGetHandle($hWnd, '', 'Edit1'))
 +
EndFunc  ;==>AutoItWinGetText
 +
 +
; Add text to AutoIt's Hidden Window.
 +
Func AutoItWinSetText($sString)
 +
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
 +
    Return ControlSetText($hWnd, "", ControlGetHandle($hWnd, "", 'Edit1'), ControlGetText($hWnd, '', ControlGetHandle($hWnd, '', 'Edit1')) & $sString)
 +
EndFunc  ;==>AutoItWinSetText
 +
 +
; Display AutoIt's Hidden Window. Returns the handle of the window.
 +
Func AutoItWinShow()
 +
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
 +
    WinMove($hWnd, '', (@DesktopWidth / 2) - 250, (@DesktopHeight / 2) - 250, 500, 500) ; Move the AutoIt Hidden Window and re-size for a better view of the data that will be set.
 +
    WinSetState($hWnd, '', @SW_SHOW) ; Show the AutoIt Hidden Window, normally this is hidden, but in the interest of this example I'm displaying it.
 +
    Return $hWnd
 +
EndFunc  ;==>AutoItWinShow
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _DockToWindow ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <GUIConstantsEx.au3>
 +
#include <WinAPI.au3>
 +
#include <WindowsConstants.au3>
 +
 +
If (Not ProcessExists("SciTE.exe")) Then
 +
    Exit MsgBox(4096, '', "Please start SciTE.exe")
 +
EndIf
 +
 +
Example()
 +
 +
Func Example()
 +
    ; Create a GUI, similar to SciTE Jump's GUI.
 +
    Local Const $hGUI = GUICreate('', 215, 400, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
 +
 +
    GUISetState(@SW_SHOWNORMAL, $hGUI)
 +
 +
    ; Dock the first window to left and adjust the width based on the width of the second GUI.
 +
    _DockToWindow(WinGetHandle("[CLASS:SciTEWindow]"), $hGUI)
 +
 +
    While 1
 +
        Switch GUIGetMsg()
 +
            Case $GUI_EVENT_CLOSE
 +
                ExitLoop
 +
        EndSwitch
 +
    WEnd
 +
 +
    GUIDelete($hGUI)
 +
EndFunc  ;==>Example
 +
 +
Func _DockToWindow(Const $hHandle_1, Const $hHandle_2)
 +
    ; Retrieve the working area, this is minus the taskbar dimensions so slightly different to @DesktopHeight and @DesktopWidth which is the
 +
    ; monitors height and width.
 +
    Local Const $SPI_GETWORKAREA = 48
 +
    Local Const $tWorkArea = DllStructCreate($tagRECT)
 +
    _WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0, DllStructGetPtr($tWorkArea))
 +
 +
    ; Retieve the position of the second GUI.
 +
    Local Const $aClientSize_2 = WinGetPos($hHandle_2)
 +
 +
    ; Set the state of the windows to 'Restore'.
 +
    WinSetState($hHandle_1, '', @SW_RESTORE)
 +
    WinSetState($hHandle_2, '', @SW_RESTORE)
 +
 +
    ; Move the first to the far left of the screen and adjust the width to the total screen width minus the width of the second GUI. e.g. 1366 - 215
 +
    WinMove($hHandle_1, '', DllStructGetData($tWorkArea, 'Left'), DllStructGetData($tWorkArea, 'Top'), DllStructGetData($tWorkArea, 'Right') - DllStructGetData($tWorkArea, 'Left') - $aClientSize_2[2], DllStructGetData($tWorkArea, 'Bottom') - DllStructGetData($tWorkArea, 'Top'))
 +
 +
    ; Move the second window to the far right in between the remaining space and adjust the height of the GUI.
 +
    WinMove($hHandle_2, '', DllStructGetData($tWorkArea, 'Right') - DllStructGetData($tWorkArea, 'Left') - $aClientSize_2[2], DllStructGetData($tWorkArea, 'Top'), $aClientSize_2[2], DllStructGetData($tWorkArea, 'Bottom') - DllStructGetData($tWorkArea, 'Top'))
 +
EndFunc  ;==>_DockToWindow
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _FuncExists ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
MsgBox(0, "TEST", "Function Exists = " & _FuncExists("_FuncExists", @ScriptFullPath))
 +
 +
Func _FuncExists($sFunc, $sPath)
 +
  If Not FileExists($sPath) Then Return SetError(1)
 +
  Local Const $sStr = FileRead($sPath)
 +
  Local Const $sRegEx = "(?i)(?m:^|\n)\s*Func\s+(" & $sFunc & ")\s*\("
 +
  Local Const $aRegEx = StringRegExp($sStr, $sRegEx, 1)
 +
  If IsArray($aRegEx) Then Return 1
 +
  Return 0
 +
EndFunc
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _FunctionSort ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Get the list of Functions in a script and sort by alphabetical order.
 +
 +
#include <Array.au3>
 +
#include <String.au3>
 +
 +
Local $sFile = FileOpenDialog(@ScriptName, "Select an AutoIt file.", "Au3 (*.au3)")
 +
 +
If @error Then
 +
    Exit
 +
EndIf
 +
ClipPut(_FunctionSort($sFile))
 +
 +
Func _FunctionSort($sFilePath)
 +
    Local Const $sRead = FileRead($sFilePath)
 +
 +
Local $aReturn = StringRegExp("Func _Count()" & @CRLF & "EndFunc ;==>_Count" & $sRead, '(?s)(?i)Func(.*?)EndFunc', 3)
 +
 +
    If @error Then
 +
        Return SetError(1, 0, 0)
 +
    EndIf
 +
 +
    $aReturn[0] = UBound($aReturn, 1) - 1
 +
 +
    _ArraySort($aReturn, 0, 1)
 +
 +
    Local $sReturn
 +
 +
    For $A = 1 To $aReturn[0]
 +
        $sReturn &= "Func" & $aReturn[$A] & "EndFunc" & @CRLF & @CRLF
 +
    Next
 +
 +
    Return $sReturn
 +
EndFunc  ;==>_FunctionSort
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsBeta ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <Array.au3>
 +
#include <MsgBoxConstants.au3>
 +
 +
Example()
 +
 +
Func Example()
 +
    Local $aTest[10]
 +
    _ArrayUnique($aTest, 0, 5)
 +
    Local $iError = @error
 +
    ConsoleWrite('$iError = ' & $iError & @CRLF)
 +
    If _IsBeta() Then
 +
        If $iError = 3 Then
 +
            MsgBox($MB_SYSTEMMODAL, '@error', '3 - $iBase or $iCase contains an invalid value' & @CRLF & @AutoItVersion)
 +
        EndIf
 +
    Else
 +
        If $iError = 2 Then
 +
            MsgBox($MB_SYSTEMMODAL, '@error', '2 - $iBase or $iCase contains an invalid value' & @CRLF & @AutoItVersion)
 +
        EndIf
 +
    EndIf
 +
EndFunc  ;==>Example
 +
 +
Func _IsBeta()
 +
      Return Mod(StringSplit(@AutoItVersion, '.')[3], 2) == 1
 +
EndFunc  ;==>_IsBeta
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsButton ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <ButtonConstants.au3>
 +
#include <Constants.au3>
 +
#include <WinAPI.au3>
 +
 +
Example()
 +
 +
Func Example()
 +
    Local Const $hGUI = GUICreate('')
 +
    Local Const $iLabel = GUICtrlCreateButton('', 0, 0, 50, 50)
 +
    Local Const $iCheckbox = GUICtrlCreateCheckbox('', 0, 0, 100, 20) ; This is considered a 'Button' by _WinAPI_GetClassName too.
 +
 +
    GUISetState(@SW_SHOWNORMAL, $hGUI)
 +
 +
    MsgBox(4096, '', 'AutoIt Button ID: ' & _IsButton($iLabel) & @CRLF & _
 +
            'AutoIt Button Handle: ' & _IsButton(GUICtrlGetHandle($iLabel)) & @CRLF & _
 +
            'AutoIt Checkbox ID: ' & _IsButton($iCheckbox) & @CRLF & _
 +
            'AutoIt Checkbox Handle: ' & _IsButton(GUICtrlGetHandle($iCheckbox)) & @CRLF)
 +
 +
    Return GUIDelete($hGUI)
 +
EndFunc  ;==>Example
 +
 +
; Check if a variable is referencing a Button control.
 +
Func _IsButton($hWnd)
 +
    If IsHWnd($hWnd) = 0 Then
 +
        $hWnd = GUICtrlGetHandle($hWnd)
 +
    EndIf
 +
 +
    Local Const $sClassName = _WinAPI_GetClassName($hWnd)
 +
 +
    If $sClassName = 'Button' Then
 +
        Local Const $aStyle[5] = [4, $BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_RADIOBUTTON, $BS_AUTORADIOBUTTON]
 +
 +
        Local Const $iLong = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
 +
 +
For $i = 1 To $aStyle[0]
 +
            If BitAND($iLong, $aStyle[$i]) = $aStyle[$i] Then
 +
                Return False
 +
            EndIf
 +
        Next
 +
 +
        Return True
 +
    EndIf
 +
 +
    Return False
 +
EndFunc  ;==>_IsButton
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsControlID ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Check if a Control ID is a native AutoIt control.
 +
 +
#include <GUIListView.au3>
 +
#include <WinAPI.au3>
 +
 +
Example()
 +
 +
Func Example()
 +
    Local Const $hGUI = GUICreate('')
 +
    Local Const $iControlID = GUICtrlCreateLabel('', 0, 0, 500, 500)
 +
    Local Const $hListView = _GUICtrlListView_Create($hGUI, 'Example', 0, 0, 500, 500)
 +
 +
GUISetState(@SW_SHOWNORMAL, $hGUI)
 +
 +
    MsgBox(4096, '', 'AutoIt ControlID: ' & _IsControlID($iControlID) & @CRLF & _
 +
            'Random Number: ' & _IsControlID(Random(42, 99, 1)) & @CRLF & _
 +
            'AutoIt ControlID Handle: ' & _IsControlID(GUICtrlGetHandle($iControlID)) & @CRLF & _
 +
            'ListView UDF Handle: ' & _IsControlID($hListView) & @CRLF & _
 +
            'ListView UDF Handle: ' & _IsControlID(GUICtrlGetHandle($hListView)) & @CRLF)
 +
 +
    _GUICtrlListView_Destroy($hListView)
 +
 +
    Return GUIDelete($hGUI)
 +
EndFunc  ;==>Example
 +
 +
Func _IsControlID($iControlID)
 +
    If IsHWnd($iControlID) Then
 +
        $iControlID = _WinAPI_GetDlgCtrlID($iControlID)
 +
    EndIf
 +
 +
    Return IsHWnd(GUICtrlGetHandle($iControlID)) = 1
 +
EndFunc  ;==>_IsControlID
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetAutoItIncludesFromSciTE ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <WinAPIEx.au3>
 +
 +
ConsoleWrite(_GetAutoItIncludesFromSciTE() & @CRLF)
 +
 +
; Retrieve the AutoIt includes path from the SciTE process.
 +
Func _GetAutoItIncludesFromSciTE()
 +
    Local $sRelativePath = '..\Include'
 +
Local Const $sWorkingDir = @WorkingDir
 +
    FileChangeDir(_WinAPI_PathRemoveFileSpec(_WinAPI_GetProcessFileName(ProcessExists('SciTE.exe'))))
 +
    $sRelativePath = _WinAPI_GetFullPathName($sRelativePath)
 +
    FileChangeDir($sWorkingDir)
 +
    Return _WinAPI_PathRemoveBackslash($sRelativePath)
 +
EndFunc  ;==>_GetAutoItIncludesFromSciTE
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetAutoItInstall ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Get the AutoIt installation folder.
 +
 +
ConsoleWrite(_GetAutoItInstall() & @CRLF)
 +
 +
Func _GetAutoItInstall()
 +
    Return StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 2, -1) - 1)
 +
EndFunc  ;==>_GetAutoItInstall
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetAutoItInstallEx ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
ConsoleWrite(_GetAutoItInstallEx() & @CRLF)
 +
 +
; Get the installation of AutoIt. An improved version of _GetAutoItInstall.
 +
Func _GetAutoItInstallEx()
 +
    Local $aWow6432Node[2] = ['', 'Wow6432Node\'], $aFiles[4] = [3, @ProgramFilesDir, EnvGet("PROGRAMFILES"), EnvGet("PROGRAMFILES(X86)")]
 +
    Local $sFilePath = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\' & $aWow6432Node[@AutoItX64] & 'AutoIt v3\AutoIt\', 'InstallDir')
 +
    If @error Then
 +
        For $A = 1 To $aFiles[0]
 +
            $aFiles[$A] &= '\AutoIt'
 +
            If FileExists($aFiles[$A]) Then
 +
                Return $aFiles[$A]
 +
            EndIf
 +
        Next
 +
        Return SetError(1, 0, '')
 +
    Else
 +
        Return $sFilePath
 +
    EndIf
 +
EndFunc  ;==>_GetAutoItInstallEx
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetAutoItInstallFromSciTE ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
ConsoleWrite(_GetAutoItInstallFromSciTE() & @CRLF)
 +
 +
; Retrieve the AutoIt installation path from the SciTE process.
 +
Func _GetAutoItInstallFromSciTE()
 +
    Local $sRelativePath = '..\', $sWorkingDir = @WorkingDir
 +
    FileChangeDir( _WinAPI_PathRemoveFileSpec(_WinAPI_GetProcessFileName(ProcessExists("SciTE.exe"))))
 +
    $sRelativePath = _WinAPI_GetFullPathName($sRelativePath)
 +
    FileChangeDir($sWorkingDir)
 +
    Return _WinAPI_PathRemoveBackslash($sRelativePath)
 +
EndFunc  ;==>_GetAutoItInstallFromSciTE
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetClasses ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Get ALL Controls Info
 +
 +
Example()
 +
 +
Func Example()
 +
; Run Calculator
 +
Run("calc.exe")
 +
 +
; Wait 10 seconds for the Calculator window to appear.
 +
Local const $hWnd = WinWait("[CLASS:CalcFrame]", '', 10)
 +
 +
; Retrieve a list of all the controls in the Calculator window using the handle returned by WinWait.
 +
MsgBox(4096, '', _GetClasses($hWnd))
 +
 +
; Close the Calculator window using the handle returned by WinWait.
 +
WinClose($hWnd)
 +
EndFunc  ;==>Example
 +
 +
; This function returns an @LF-separated list of controls on the specified window.
 +
Func _GetClasses($sTitle, $sText = '')
 +
Local $iCount_Button = 0, $iCount_Edit = 0, $iCount_Static = 0
 +
Local $aClasses = StringSplit(WinGetClassList($sTitle, $sText), @LF)
 +
Local $aClassID[$aClasses[0] + 1] = [$aClasses[0]]
 +
 +
For $i = 1 To $aClasses[0]
 +
Select
 +
Case $aClasses[$i] = "Button"
 +
$iCount_Button += 1
 +
$aClassID[$i] = $aClasses[$i] & $iCount_Button
 +
Case $aClasses[$i] = "Edit"
 +
$iCount_Edit += 1
 +
$aClassID[$i] = $aClasses[$i] & $iCount_Edit
 +
$aClasses[$i] = "Input"
 +
Case $aClasses[$i] = "Static"
 +
$iCount_Static += 1
 +
$aClassID[$i] = $aClasses[$i] & $iCount_Static
 +
$aClasses[$i] = "Label"
 +
Case Else
 +
If $aClasses[$i] <> "" Then
 +
$aClassID[$i] = $aClasses[$i] & "?"
 +
EndIf
 +
EndSelect
 +
Next
 +
 +
; Combine the results.
 +
Local $sReturn = ""
 +
 +
For $i = 1 To $aClassID[0]
 +
$sReturn &= $aClassID[$i] & @LF
 +
Next
 +
 +
Return $sReturn
 +
EndFunc  ;==>_GetClasses
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetFile ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; FileRead Alternative
 +
 +
Func _GetFile($sFile, $iFormat = 0)
 +
    Local $hFileOpen = FileOpen($sFile, $iFormat)
 +
    If $hFileOpen = -1 Then
 +
        Return SetError(1, 0, "")
 +
    EndIf
 +
    Local $sData = FileRead($hFileOpen)
 +
    FileClose($hFileOpen)
 +
    Return $sData
 +
EndFunc  ;==>_GetFile
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetTitle ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Get the title of your program.
 +
 +
ConsoleWrite(_GetTitle('Example') & @CRLF)
 +
; The second parameter would normally be @ScriptDir & '\Uninstall.exe' for example, but for this demonstration I'm using the full path.
 +
ConsoleWrite(_GetTitle('Example', @ScriptFullPath) & @CRLF)
 +
 +
Func _GetTitle($sProgramName, $sInstallPath = '')
 +
    Local $aOSArch[2] = ['', ' (64-bit)'], $aPortable[2] = [' (Portable)', '']
 +
    Return $sProgramName & $aOSArch[@AutoItX64] & $aPortable[FileExists($sInstallPath)]
 +
EndFunc  ;==>_GetTitle
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _GetXML ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Simple Way Of Parsing XML Data.
 +
 +
#include <Array.au3>
 +
 +
Global $aReturn, $sXMLData
 +
 +
$sXMLData = "<data>This is a Simple example of XML</data><data>This is a Simple example of XML and is the Second String.</data>"
 +
$aReturn = _GetXML($sXMLData, "data")
 +
_ArrayDisplay($aReturn, "_GetXML()")
 +
 +
Func _GetXML($sString, $sData)
 +
    Local $aError[2] = [1, $sString], $aReturn
 +
    $aReturn = StringRegExp('<' & $sData & '></' & $sData & '>' & $sString, '(?s)(?i)<' & $sData & '>(.*?)</' & $sData & '>', 3)
 +
    If @error Then
 +
        Return SetError(1, 0, $aError)
 +
    EndIf
 +
    $aReturn[0] = UBound($aReturn, 1) - 1
 +
    Return SetError(0, 0, $aReturn)
 +
EndFunc  ;==>_GetXML
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== Include Source With Exe ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
;recover source .au3 file with /Extract switch
 +
; The above code would be copied into the top of your script. The source location (C:\Test.au3 in my example) is the full path to your script file.
 +
;Once compiled, if you run the script from the Run line with the /Extract switch, it will extact the original .au3 file into the Temp directory and will exit without actually executing the script.
 +
If StringInStr($cmdlineRaw, "/Extract") Then
 +
FileInstall("C:\Test.au3", @TempDir & "\Test.au3", 1)
 +
Exit
 +
EndIf
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsANSIFile ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <FileConstants.au3>
 +
 +
ConsoleWrite(_IsANSIFile(@ScriptFullPath) & @LF) ; Returns True.
 +
 +
Func _IsANSIFile($sFilePath)
 +
    Return FileGetEncoding($sFilePath) = $FO_READ
 +
EndFunc  ;==>_IsUnicodeFile
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsUnicodeFile ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <FileConstants.au3>
 +
 +
ConsoleWrite(_IsUnicodeFile(@ScriptFullPath) & @LF) ; Returns False.
 +
 +
Func _IsUnicodeFile($sFilePath)
 +
    Return FileGetEncoding($sFilePath) = $FO_UNICODE
 +
EndFunc  ;==>_IsUnicodeFile
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsAu3File ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
ConsoleWrite(_IsAu3File(@AutoItExe) & @CRLF)
 +
ConsoleWrite(_IsAu3File(@ScriptFullPath) & @CRLF)
 +
 +
; Checks whether the filepath is an au3 file.
 +
Func _IsAu3File($sFilePath)
 +
    Return StringTrimLeft($sFilePath, StringInStr($sFilePath, ".", 2, -1)) = "au3"
 +
EndFunc  ;==>_IsAu3File
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsDefault ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
If _IsDefault(Default) Then
 +
    MsgBox(0, "_IsDefault() - 1", "This was a Default variable.")
 +
EndIf
 +
 +
If _IsDefault(-1) Then
 +
    MsgBox(0, "_IsDefault() - 2", "This was a Default variable.")
 +
EndIf
 +
 +
If _IsDefault("Other") Then
 +
    MsgBox(0, "_IsDefault() - 3", "This was a Default variable.")
 +
EndIf
 +
 +
Func _IsDefault($sDefault)
 +
    Return StringRegExp($sDefault, "(?-i)\s|Default|-1|0")
 +
EndFunc  ;==>_IsDefault
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsInTrial ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <Date.au3> ; Required for _DateDiff()
 +
 +
ConsoleWrite('Date trial started: ' & @YEAR & '/' & @MON & '/01' & @CRLF & _
 +
        'Today''s date: ' & @YEAR & '/' & @MON & '/' & @MDAY & @CRLF & _
 +
        'Trial period: 30 days' & @CRLF & _
 +
        'Is the trial period still valid: ' & _IsInTrial(@YEAR & '/' & @MON & '/01', 30) & @CRLF)
 +
 +
; Check if a trial period date is still valid.
 +
Func _IsInTrial($sDateString, $iDays)
 +
    Return (_DateDiff('D', $sDateString, _NowCalcDate()) < $iDays)
 +
EndFunc  ;==>_IsInTrial
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _IsVisible ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Check if the Notepad Window is visible.
 +
 +
Example()
 +
 +
Func Example()
 +
    ; Run Notepad
 +
    Run("notepad.exe")
 +
 +
    ; Wait 10 seconds for the Notepad window to appear.
 +
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
 +
 +
    ; Check if the Notepad window is visible and display the appropriate message box.
 +
    If _IsVisible($hWnd) Then
 +
        MsgBox(4096, "", "Notepad is visible.")
 +
    Else
 +
        MsgBox(4096, "", "Notepad isn't visible.")
 +
    EndIf
 +
 +
    ; Close the Notepad window using the handle returned by WinWait.
 +
    WinClose($hWnd)
 +
EndFunc  ;==>Example
 +
 +
; Check if the window is visible.
 +
Func _IsVisible($hWnd)
 +
    Return BitAND(WinGetState($hWnd), 2) = 2
 +
EndFunc  ;==>_IsVisible
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== Open Help File to Desired Page ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Open help file / Open a desired page
 +
 +
Global Const $sAutoItPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir")
 +
 +
Run(@WindowsDir & "\hh.exe " & $sAutoItPath & "\AutoIt3.chm::/html/functions/GUICtrlCreateUpdown.htm")
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _RunAU3 ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
_RunAU3("AU3_Example.txt", '"This is a commandline example!"')
 +
 +
Func _RunAU3($sFilePath,  $sCommandLine = "", $sWorkingDir = "", $iShowFlag = @SW_SHOW, $iOptFlag = 0)
 +
    Return Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sFilePath & '" ' & $sCommandLine, $sWorkingDir, $iShowFlag, $iOptFlag)
 +
EndFunc  ;==>_RunAU3
 +
 +
Func _RunWaitAU3($sFilePath, $sCommandLine = "", $sWorkingDir = "", $iShowFlag = @SW_SHOW, $iOptFlag = 0)
 +
    Local $iPID
 +
    $iPID = RunWait('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sFilePath & '" ' & $sCommandLine, $sWorkingDir, $iShowFlag, $iOptFlag)
 +
    If @error Then
 +
        Return SetError(@error, 1, 0)
 +
    EndIf
 +
    Return $iPID
 +
EndFunc  ;==>_RunWaitAU3
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== Run Any au3 File From Your Program ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Run Any Au3 File From Your Program
 +
 +
Global Const $sFilePath = @ScriptDir & "\Test.au3"
 +
 +
If @Compiled Then
 +
Global Const $sFileExe = FileGetShortName(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sFilePath & '"')
 +
Run($sFileExe)
 +
Else
 +
Global Const $sFileAu3 = FileGetShortName($sFilePath)
 +
Run(@AutoItExe & " " & $sFileAu3, "", @SW_HIDE)
 +
EndIf
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _ScriptName ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
ConsoleWrite(_ScriptName() & @CRLF)
 +
 +
; Return the @ScriptName minus the .exe or .au3 extension.
 +
Func _ScriptName()
 +
Return StringLeft(@ScriptName, StringInStr(@ScriptName, '.', 2, -1) - 1)
 +
EndFunc  ;==>_ScriptName
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _ScriptVersion ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#NoTrayIcon
 +
 +
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
 +
#AutoIt3Wrapper_UseUpx=n
 +
#AutoIt3Wrapper_Res_Fileversion=1.2.3.4
 +
#AutoIt3Wrapper_Res_LegalCopyright=2012  www.favessoft.com
 +
#AutoIt3Wrapper_Res_Language=1033
 +
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
 +
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
 +
 +
Global $version = _ScriptVersion()
 +
 +
Global $msg = "ScriptVerDemo" & " " & $version & "  Copyright (c) 2012  www.favessoft.com" & @CRLF & @CRLF
 +
 +
MsgBox(0x1040, "", $msg)
 +
 +
; return File Version string from compiled or .au3 script
 +
; returns "" if no version info available
 +
; Note: The .au3 script must contain #AutoItWrapper
 +
; directives with file version or "" is returned.
 +
Func _ScriptVersion(Const $Script = @ScriptFullPath)
 +
    If StringRight($Script,4) = ".exe" Then
 +
        Return FileGetVersion($Script)
 +
    Else
 +
        Local Const $scriptHandle = FileOpen($Script)
 +
Local $ver
 +
Local $found = False
 +
Local $pos
 +
 +
        If $scriptHandle <> -1 Then
 +
            Do
 +
                $ver = FileReadLine($scriptHandle)
 +
                $sPos = StringInStr($ver, "_Fileversion=")
 +
 +
                If $sPos Then
 +
                    $ver = StringMid($ver, $sPos + StringLen("_Fileversion="))
 +
                    $found = True
 +
                    ExitLoop
 +
                EndIf
 +
            Until StringLeft($ver, 1) <> "#"
 +
 +
            FileClose($scriptHandle)
 +
        EndIf
 +
    EndIf
 +
 +
    If Not $found Then $ver = ""
 +
 +
    Return $ver
 +
EndFunc  ;==>_ScriptVersion
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _SetFile ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; FileWrite Alternative
 +
 +
Func _SetFile(Const $sString, Const $sFile, Const $iOverwrite = 0)
 +
    Local Const $hFileOpen = FileOpen($sFile, $iOverwrite + 1)
 +
 +
    FileWrite($hFileOpen, $sString)
 +
    FileClose($hFileOpen)
 +
 +
    If @error Then
 +
        Return SetError(1, 0, $sString)
 +
    EndIf
 +
 +
    Return $sString
 +
EndFunc  ;==>_SetFile
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _ShowHelp ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
HotKeySet("{F1}", "_ShowHelp")
 +
 +
Func _ShowHelp()
 +
Return ShellExecute(@ProgramFilesDir & "\AutoIt3\AutoIt3Help.exe") ; change this to the location of your own helpfile.
 +
EndFunc  ;==>_ShowHelp
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _SingletonPID ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
Local $iSingleton = _SingletonPID('RandomName', 1)
 +
 +
If $iSingleton = 0 Then
 +
    MsgBox(4096, '', 'This is the first instance of the program running: ' & $iSingleton)
 +
Else
 +
    MsgBox(4096, '', 'There is another instance running. This PID is: ' & $iSingleton)
 +
EndIf
 +
 +
; #FUNCTION# ====================================================================================================================
 +
; Name ..........: _SingletonPID
 +
; Description ...: Enforce a design paradigm where only one instance of the script may be running.
 +
; Syntax ........: _SingletonPID($sOccurenceName[, $iFlag = 0])
 +
; Parameters ....: $sOccurenceName      - String to identify the occurrence of the script.
 +
;                  $iFlag              - [optional] Optional parameters. Default is 0.
 +
;                  0 - Exit the script with the exit code -1 if another instance already exists.
 +
;                  1 - Return the PID of the main executable and without exiting the script too.
 +
; Return values .: Success - 0 No other process is running.
 +
;                  Failure - The PID of the main executable.
 +
; Author ........: guinness with initial ideas by Valik for _Singleton & KaFu for _EnforceSingleInstance.
 +
; Example .......: Yes
 +
; ===============================================================================================================================
 +
Func _SingletonPID(Const $sOccurenceName, Const $iFlag = 0)
 +
    Local $hHandle = WinGetHandle($sOccurenceName)
 +
 +
    If @error Then
 +
        AutoItWinSetTitle($sOccurenceName)
 +
        $hHandle = WinGetHandle($sOccurenceName)
 +
        ControlSetText($hHandle, '', ControlGetHandle($hHandle, '', 'Edit1'), @AutoItPID)
 +
    Else
 +
        If BitAND($iFlag, 1) Then
 +
            Return Number(ControlGetText($hHandle, '', ControlGetHandle($hHandle, '', 'Edit1')))
 +
        Else
 +
            Exit -1
 +
        EndIf
 +
    EndIf
 +
 +
    Return 0
 +
EndFunc  ;==>_SingletonPID
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _Sort ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <Constants.au3>
 +
 +
ConsoleWrite(_Sort("$sVariable" & @CRLF & "$iVariable" & @CRLF & "$tVariable" & @CRLF & "$pVariable"))
 +
 +
Func _Sort(Const $sSortList)
 +
    Local Const $iPID = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD), $sOutput = ""
 +
 +
    StdinWrite($iPID, $sSortList)
 +
    StdinWrite($iPID)
 +
 +
    While 1
 +
        $sOutput &= StdoutRead($iPID)
 +
 +
        If @error Then
 +
            ExitLoop
 +
        EndIf
 +
    WEnd
 +
 +
    Return $sOutput
 +
EndFunc  ;==>_Sort
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== Speak Object and Save to WAV File ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Speak Object and save to wav file
 +
 +
 +
 +
 +
 +
Local $ObjFile = ObjCreate("Sapi.SpFileStream.1")
 +
 +
$ObjVoice.Speak($sText)
 +
 +
$ObjFile.Open($sFilePath, 3)
 +
 +
$ObjVoice.AudioOutputStream = $ObjFile
 +
EndFunc  ;==>_SpeakToWAV
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _VariableSwap ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
Global $sString_1 = 'This is string 1.'
 +
Global $sString_2 = 'This is string 2.'
 +
 +
ConsoleWrite('$sString_1: ' & $sString_1 & @CRLF)
 +
ConsoleWrite('$sString_2: ' & $sString_2 & @CRLF & @CRLF)
 +
 +
_VariableSwap($sString_1, $sString_2)
 +
 +
ConsoleWrite('$sString_1: ' & $sString_1 & @CRLF)
 +
ConsoleWrite('$sString_2: ' & $sString_2 & @CRLF & @CRLF)
 +
 +
; Swap the contents of two variables.
 +
Func _VariableSwap(ByRef $vVariable_1, ByRef $vVariable_2) ; Similar to _ArraySwap though not obvious to some this isn't limited to arrays.
 +
    Local Const $vTemp = $vVariable_1
 +
    $vVariable_1 = $vVariable_2
 +
    $vVariable_2 = $vTemp
 +
EndFunc  ;==>_VariableSwap
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WinAPI_CharLower ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
ConsoleWrite(_WinAPI_CharLower("EXAMPLE") & @CRLF) ; Similar to StringLower.
 +
 +
; Convert characters to lowercase.
 +
Func _WinAPI_CharLower($sString)
 +
    Local $aReturn = DllCall('user32.dll', 'wstr', 'CharLowerW', 'wstr', $sString)
 +
    If @error Then
 +
        Return SetError(1, 0, $sString)
 +
    EndIf
 +
    Return $aReturn[0]
 +
EndFunc  ;==>_WinAPI_CharLower
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WinAPI_CharUpper ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
ConsoleWrite(_WinAPI_CharUpper("example") & @CRLF) ; Similar to StringUpper.
 +
 +
; Convert characters to uppercase.
 +
Func _WinAPI_CharUpper($sString)
 +
Local $aReturn = DllCall('user32.dll', 'wstr', 'CharUpperW', 'wstr', $sString)
 +
If @error Then
 +
Return SetError(1, 0, $sString)
 +
EndIf
 +
Return $aReturn[0]
 +
EndFunc  ;==>_WinAPI_CharUpper
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WinAPI_PathFileExists ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; An API Alternative To FileExist.
 +
 +
ConsoleWrite(_WinAPI_PathFileExists(@ScriptFullPath) & @LF) ; File.
 +
ConsoleWrite(_WinAPI_PathFileExists("C:\") & @LF) ; Drive.
 +
ConsoleWrite(_WinAPI_PathFileExists(@ProgramFilesDir) & @LF) ; Directory.
 +
ConsoleWrite(_WinAPI_PathFileExists("Z:\File.txt") & @LF) ; Shouldn't exist!
 +
 +
Func _WinAPI_PathFileExists($sFilePath)
 +
    Local $aReturn = DllCall('shlwapi.dll', 'int', 'PathFileExistsW', 'wstr', $sFilePath)
 +
    If @error Then
 +
        Return SetError(1, 0, 0)
 +
    EndIf
 +
    Return $aReturn[0]
 +
EndFunc  ;==>_WinAPI_PathFileExists
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WinActiveByExe ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Window Active/Activate by Exe, Open Notepad whilst script is running
 +
 +
While 1
 +
    If _WinActiveByExe('notepad.exe', False) Then MsgBox(64, 'info', 'true')
 +
    Sleep(100)
 +
WEnd
 +
 +
Func _WinActiveByExe($sExe, $iActive = True);False to WinActivate, True to just see if it's active
 +
    If Not ProcessExists($sExe) Then Return SetError(1, 0, 0)
 +
    Local $aPL = ProcessList($sExe)
 +
    Local $aWL = WinList()
 +
    For $iCC = 1 To $aWL[0][0]
 +
        For $xCC = 1 To $aPL[0][0]
 +
            If $aWL[$iCC][0] <> '' And _
 +
                WinGetProcess($aWL[$iCC][1]) = $aPL[$xCC][1] And _
 +
                BitAND(WinGetState($aWL[$iCC][1]), 2) Then
 +
                If $iActive And WinActive($aWL[$iCC][1]) Then Return 1
 +
                If Not $iActive And Not WinActive($aWL[$iCC][1]) Then
 +
                    WinActivate($aWL[$iCC][1])
 +
                    Return 1
 +
                EndIf
 +
            EndIf
 +
        Next
 +
    Next
 +
    Return SetError(2, 0, 0)
 +
EndFunc
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WindowShake ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Shake a window left to right.
 +
 +
Example()
 +
 +
Func Example()
 +
    ; Run Notepad
 +
    Run("notepad.exe")
 +
 +
    ; Wait 10 seconds for the Notepad window to appear.
 +
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
 +
 +
    ; Wait for 1 second.
 +
    Sleep(1000)
 +
 +
    ; Shake the Notepad window left to right.
 +
    _WindowShake($hWnd)
 +
 +
    ; Wait for 1 second.
 +
    Sleep(1000)
 +
 +
    ; Close the Notepad window using the handle returned by WinWait.
 +
    WinClose($hWnd)
 +
EndFunc  ;==>Example
 +
 +
Func _WindowShake($sTitle, $sText = '', $iDistance = 20)
 +
    Local $hWnd = WinGetHandle($sTitle, $sText)
 +
    Local $aWinGetPos = WinGetPos($hWnd)
 +
    If @error Then
 +
        Return SetError(1, 0, 0)
 +
    EndIf
 +
    Local $aArray[5] = [4, $aWinGetPos[0] + $iDistance, $aWinGetPos[0], $aWinGetPos[0] + $iDistance, $aWinGetPos[0]]
 +
 +
    For $i = 1 To $aArray[0]
 +
        WinMove($hWnd, '', $aArray[$i], Default)
 +
        Sleep(100)
 +
    Next
 +
EndFunc  ;==>_WindowShake
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WinGetDetails ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
#include <Array.au3>
 +
 +
Global $aArray = _WinGetDetails('[ACTIVE]') ; Returns the Window's title, PID, folder path filename.
 +
 +
If @error Then
 +
    Exit
 +
EndIf
 +
 +
_ArrayDisplay($aArray)
 +
 +
Func _WinGetDetails($sTitle, $sText = '') ; Based on code of _WinGetPath by GaryFrost.
 +
    Local $aReturn[5] = [4, '-WinTitle', '-PID', '-FolderPath', '-FileName'], $aStringSplit
 +
 +
    If StringLen($sText) > 0 Then
 +
        $aReturn[1] = WinGetTitle($sTitle, $sText)
 +
    Else
 +
        $aReturn[1] = WinGetTitle($sTitle)
 +
    EndIf
 +
    $aReturn[2] = WinGetProcess($aReturn[1])
 +
 +
    Local $oWMIService = ObjGet('winmgmts:\\.\root\CIMV2')
 +
    Local $oItems = $oWMIService.ExecQuery('Select * From Win32_Process Where ProcessId = ' & $aReturn[2], 'WQL', 0x30)
 +
    If IsObj($oItems) Then
 +
        For $oItem In $oItems
 +
            If $oItem.ExecutablePath Then
 +
                $aStringSplit = StringSplit($oItem.ExecutablePath, '\')
 +
                $aReturn[3] = ''
 +
                For $A = 1 To $aStringSplit[0] - 1
 +
                    $aReturn[3] &= $aStringSplit[$A] & '\'
 +
                Next
 +
                $aReturn[3] = StringTrimRight($aReturn[3], 1)
 +
                $aReturn[4] = $aStringSplit[$aStringSplit[0]]
 +
                Return $aReturn
 +
            EndIf
 +
        Next
 +
    EndIf
 +
    Return SetError(1, 0, $aReturn)
 +
EndFunc  ;==>_WinGetPath
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WinGetNumeratedClassList ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Description: Retrieves the numerated classes from a window.
 +
 +
Func _WinGetNumeratedClassList($sTitle)
 +
    Local $sClassList = WinGetClassList($sTitle)
 +
    Local $aClassList = StringSplit($sClassList, @LF)
 +
    Local $sRetClassList = "", $sHold_List = "|"
 +
    Local $aiInHold, $iInHold
 +
 +
    For $i = 1 To UBound($aClassList) - 1
 +
        If $aClassList[$i] = "" Then ContinueLoop
 +
 +
        If StringRegExp($sHold_List, "\|" & $aClassList[$i] & "~(\d+)\|") Then
 +
            $aiInHold = StringRegExp($sHold_List, ".*\|" & $aClassList[$i] & "~(\d+)\|.*", 1)
 +
            $iInHold = Number($aiInHold[UBound($aiInHold)-1])
 +
 +
            If $iInHold = 0 Then $iInHold += 1
 +
 +
            $aClassList[$i] &= "~" & $iInHold + 1
 +
            $sHold_List &= $aClassList[$i] & "|"
 +
 +
            $sRetClassList &= $aClassList[$i] & @LF
 +
        Else
 +
            $aClassList[$i] &= "~1"
 +
            $sHold_List &= $aClassList[$i] & "|"
 +
            $sRetClassList &= $aClassList[$i] & @LF
 +
        EndIf
 +
    Next
 +
 +
    Return StringReplace(StringStripWS($sRetClassList, 3), "~", "")
 +
EndFunc
 +
</source>
 +
 +
[[#top | 맨 위로]]
 +
 +
== _WinGetHandleByPID ==
 +
 +
 +
 +
 +
 +
 +
<source lang="autoit">
 +
; Get Window Handle by PID
 +
 +
#include <Array.au3>
 +
 +
Global $a1 = _WinGetHandleByPID(232)
 +
Global $a2 = _WinGetHandleByPID("notepad.exe", -1)
 +
Global $a3 = _WinGetHandleByPID("notepad.exe", 0)
 +
Global $a4 = _WinGetHandleByPID("notepad.exe", 1)
 +
 +
_ArrayDisplay($a1, "1")
 +
_ArrayDisplay($a2, "2")
 +
_ArrayDisplay($a3, "3")
 +
_ArrayDisplay($a4, "4")
 +
 +
;$nVisible = -1 "All (Visble or not)", $nVisible = 0 "Not Visible Only", $nVisible = 1 "Visible Only"
 +
Func _WinGetHandleByPID($vProc, $nVisible = 1)
 +
    $vProc = ProcessExists($vProc);
 +
 +
    If Not $vProc Then Return SetError(1, 0, 0)
 +
 +
    Local $aWL = WinList()
 +
 +
    Local $aTemp[UBound($aWL)][2]
 +
 +
Local $nAdd = 0
 +
 +
    For $iCC = 1 To $aWL[0][0]
 +
        If $nVisible = -1 And WinGetProcess($aWL[$iCC][1]) = $vProc Then
 +
            $nAdd += 1
 +
            $aTemp[$nAdd][0] = $aWL[$iCC][0]
 +
            $aTemp[$nAdd][1] = $aWL[$iCC][1]
 +
        ElseIf $nVisible = 0 And WinGetProcess($aWL[$iCC][1]) = $vProc And _
 +
                BitAND(WinGetState($aWL[$iCC][1]), 2) = 0 Then
 +
            $nAdd += 1
 +
            $aTemp[$nAdd][0] = $aWL[$iCC][0]
 +
            $aTemp[$nAdd][1] = $aWL[$iCC][1]
 +
        ElseIf $nVisible > 0 And WinGetProcess($aWL[$iCC][1]) = $vProc And _
 +
                BitAND(WinGetState($aWL[$iCC][1]), 2) Then
 +
            $nAdd += 1
 +
            $aTemp[$nAdd][0] = $aWL[$iCC][0]
 +
            $aTemp[$nAdd][1] = $aWL[$iCC][1]
 +
        EndIf
 +
    Next
 +
 +
    If $nAdd = 0 Then Return SetError(2, 0, 0) ; No windows found
 +
 +
    ReDim $aTemp[$nAdd + 1][2]
 +
 +
    $aTemp[0][0] = $nAdd
 +
 +
    Return $aTemp
 +
EndFunc
 +
</source>
 +
 +
[[#top | 맨 위로]]
  
  

2024년 5월 12일 (일) 17:29 기준 최신판

thumb_up 추천메뉴 바로가기


1 AutoItWinShow[편집]

#include <GUIConstantsEx.au3>

Example()

Func Example()
    ; Display AutoIt's Hidden Window. See AutoItWinGetTitle and AutoItWinSetTitle for more details.
    AutoItWinShow()

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>Example

; Display AutoIt's Hidden Window. Returns the handle of the window.
Func AutoItWinShow()
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
    WinMove($hWnd, '', (@DesktopWidth / 2) - 250, (@DesktopHeight / 2) - 250, 500, 500) ; Move the AutoIt Hidden Window and re-size for a better view of the data that will be set.
    WinSetState($hWnd, '', @SW_SHOW) ; Show the AutoIt Hidden Window, normally this is hidden, but in the interest of this example I'm displaying it.
    Return $hWnd
EndFunc   ;==>AutoItWinShow

맨 위로

2 AutoItWinGetText[편집]

Example()

Func Example()
    ; Display AutoIt's Hidden Window. See AutoItWinGetTitle and AutoItWinSetTitle for more details.
    AutoItWinShow()

    ; Add a text string to AutoIt's Hidden Window. Compile to see the text in AutoIt's Hidden Window.
    AutoItWinSetText('Welcome to AutoIt V' & @AutoItVersion & @CRLF)

    ; Add a text string to AutoIt's Hidden Window. Compile to see the text in AutoIt's Hidden Window.
    AutoItWinSetText('Windows Type: ' & @OSType & @CRLF)

    ; Display the text stored in AutoIt's Hidden Window.
    MsgBox(4096, '', AutoItWinGetText())

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>Example

; Retrieve the text in AutoIt's Hidden Window.
Func AutoItWinGetText()
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
    Return ControlGetText($hWnd, '', ControlGetHandle($hWnd, '', 'Edit1'))
EndFunc   ;==>AutoItWinGetText

; Add text to AutoIt's Hidden Window.
Func AutoItWinSetText($sString)
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
    Return ControlSetText($hWnd, "", ControlGetHandle($hWnd, "", 'Edit1'), ControlGetText($hWnd, '', ControlGetHandle($hWnd, '', 'Edit1')) & $sString)
EndFunc   ;==>AutoItWinSetText

; Display AutoIt's Hidden Window. Returns the handle of the window.
Func AutoItWinShow()
    Local Const $hWnd = WinGetHandle(AutoItWinGetTitle()) ; Get the handle of the AutoIt Hidden Window by finding out the title of the AutoIt Hidden Window.
    WinMove($hWnd, '', (@DesktopWidth / 2) - 250, (@DesktopHeight / 2) - 250, 500, 500) ; Move the AutoIt Hidden Window and re-size for a better view of the data that will be set.
    WinSetState($hWnd, '', @SW_SHOW) ; Show the AutoIt Hidden Window, normally this is hidden, but in the interest of this example I'm displaying it.
    Return $hWnd
EndFunc   ;==>AutoItWinShow

맨 위로

3 _DockToWindow[편집]

#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

If (Not ProcessExists("SciTE.exe")) Then
    Exit MsgBox(4096, '', "Please start SciTE.exe")
EndIf

Example()

Func Example()
    ; Create a GUI, similar to SciTE Jump's GUI.
    Local Const $hGUI = GUICreate('', 215, 400, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX))

    GUISetState(@SW_SHOWNORMAL, $hGUI)

    ; Dock the first window to left and adjust the width based on the width of the second GUI.
    _DockToWindow(WinGetHandle("[CLASS:SciTEWindow]"), $hGUI)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd

    GUIDelete($hGUI)
EndFunc   ;==>Example

Func _DockToWindow(Const $hHandle_1, Const $hHandle_2)
    ; Retrieve the working area, this is minus the taskbar dimensions so slightly different to @DesktopHeight and @DesktopWidth which is the
    ; monitors height and width.
    Local Const $SPI_GETWORKAREA = 48
    Local Const $tWorkArea = DllStructCreate($tagRECT)
    _WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0, DllStructGetPtr($tWorkArea))

    ; Retieve the position of the second GUI.
    Local Const $aClientSize_2 = WinGetPos($hHandle_2)

    ; Set the state of the windows to 'Restore'.
    WinSetState($hHandle_1, '', @SW_RESTORE)
    WinSetState($hHandle_2, '', @SW_RESTORE)

    ; Move the first to the far left of the screen and adjust the width to the total screen width minus the width of the second GUI. e.g. 1366 - 215
    WinMove($hHandle_1, '', DllStructGetData($tWorkArea, 'Left'), DllStructGetData($tWorkArea, 'Top'), DllStructGetData($tWorkArea, 'Right') - DllStructGetData($tWorkArea, 'Left') - $aClientSize_2[2], DllStructGetData($tWorkArea, 'Bottom') - DllStructGetData($tWorkArea, 'Top'))

    ; Move the second window to the far right in between the remaining space and adjust the height of the GUI.
    WinMove($hHandle_2, '', DllStructGetData($tWorkArea, 'Right') - DllStructGetData($tWorkArea, 'Left') - $aClientSize_2[2], DllStructGetData($tWorkArea, 'Top'), $aClientSize_2[2], DllStructGetData($tWorkArea, 'Bottom') - DllStructGetData($tWorkArea, 'Top'))
EndFunc   ;==>_DockToWindow

맨 위로

4 _FuncExists[편집]

MsgBox(0, "TEST", "Function Exists = " & _FuncExists("_FuncExists", @ScriptFullPath))

Func _FuncExists($sFunc, $sPath)
   If Not FileExists($sPath) Then Return SetError(1)
   Local Const $sStr = FileRead($sPath)
   Local Const $sRegEx = "(?i)(?m:^|\n)\s*Func\s+(" & $sFunc & ")\s*\("
   Local Const $aRegEx = StringRegExp($sStr, $sRegEx, 1)
   If IsArray($aRegEx) Then Return 1
   Return 0
EndFunc

맨 위로

5 _FunctionSort[편집]

; Get the list of Functions in a script and sort by alphabetical order.

#include <Array.au3>
#include <String.au3>

Local $sFile = FileOpenDialog(@ScriptName, "Select an AutoIt file.", "Au3 (*.au3)")

If @error Then
    Exit
EndIf
ClipPut(_FunctionSort($sFile))

Func _FunctionSort($sFilePath)
    Local Const $sRead = FileRead($sFilePath)

	Local $aReturn = StringRegExp("Func _Count()" & @CRLF & "EndFunc ;==>_Count" & $sRead, '(?s)(?i)Func(.*?)EndFunc', 3)

    If @error Then
        Return SetError(1, 0, 0)
    EndIf

    $aReturn[0] = UBound($aReturn, 1) - 1

    _ArraySort($aReturn, 0, 1)

    Local $sReturn

    For $A = 1 To $aReturn[0]
        $sReturn &= "Func" & $aReturn[$A] & "EndFunc" & @CRLF & @CRLF
    Next

    Return $sReturn
EndFunc   ;==>_FunctionSort

맨 위로

6 _IsBeta[편집]

#include <Array.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $aTest[10]
    _ArrayUnique($aTest, 0, 5)
    Local $iError = @error
    ConsoleWrite('$iError = ' & $iError & @CRLF)
    If _IsBeta() Then
        If $iError = 3 Then
            MsgBox($MB_SYSTEMMODAL, '@error', '3 - $iBase or $iCase contains an invalid value' & @CRLF & @AutoItVersion)
        EndIf
    Else
        If $iError = 2 Then
            MsgBox($MB_SYSTEMMODAL, '@error', '2 - $iBase or $iCase contains an invalid value' & @CRLF & @AutoItVersion)
        EndIf
    EndIf
EndFunc   ;==>Example

Func _IsBeta()
       Return Mod(StringSplit(@AutoItVersion, '.')[3], 2) == 1
EndFunc   ;==>_IsBeta

맨 위로

7 _IsButton[편집]

#include <ButtonConstants.au3>
#include <Constants.au3>
#include <WinAPI.au3>

Example()

Func Example()
    Local Const $hGUI = GUICreate('')
    Local Const $iLabel = GUICtrlCreateButton('', 0, 0, 50, 50)
    Local Const $iCheckbox = GUICtrlCreateCheckbox('', 0, 0, 100, 20) ; This is considered a 'Button' by _WinAPI_GetClassName too.

    GUISetState(@SW_SHOWNORMAL, $hGUI)

    MsgBox(4096, '', 'AutoIt Button ID: ' & _IsButton($iLabel) & @CRLF & _
            'AutoIt Button Handle: ' & _IsButton(GUICtrlGetHandle($iLabel)) & @CRLF & _
            'AutoIt Checkbox ID: ' & _IsButton($iCheckbox) & @CRLF & _
            'AutoIt Checkbox Handle: ' & _IsButton(GUICtrlGetHandle($iCheckbox)) & @CRLF)

    Return GUIDelete($hGUI)
EndFunc   ;==>Example

; Check if a variable is referencing a Button control.
Func _IsButton($hWnd)
    If IsHWnd($hWnd) = 0 Then
        $hWnd = GUICtrlGetHandle($hWnd)
    EndIf

    Local Const $sClassName = _WinAPI_GetClassName($hWnd)

    If $sClassName = 'Button' Then
        Local Const $aStyle[5] = [4, $BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_RADIOBUTTON, $BS_AUTORADIOBUTTON]

        Local Const $iLong = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)

		For $i = 1 To $aStyle[0]
            If BitAND($iLong, $aStyle[$i]) = $aStyle[$i] Then
                Return False
            EndIf
        Next

        Return True
    EndIf

    Return False
EndFunc   ;==>_IsButton

맨 위로

8 _IsControlID[편집]

; Check if a Control ID is a native AutoIt control.

#include <GUIListView.au3>
#include <WinAPI.au3>

Example()

Func Example()
    Local Const $hGUI = GUICreate('')
    Local Const $iControlID = GUICtrlCreateLabel('', 0, 0, 500, 500)
    Local Const $hListView = _GUICtrlListView_Create($hGUI, 'Example', 0, 0, 500, 500)

	GUISetState(@SW_SHOWNORMAL, $hGUI)

    MsgBox(4096, '', 'AutoIt ControlID: ' & _IsControlID($iControlID) & @CRLF & _
            'Random Number: ' & _IsControlID(Random(42, 99, 1)) & @CRLF & _
            'AutoIt ControlID Handle: ' & _IsControlID(GUICtrlGetHandle($iControlID)) & @CRLF & _
            'ListView UDF Handle: ' & _IsControlID($hListView) & @CRLF & _
            'ListView UDF Handle: ' & _IsControlID(GUICtrlGetHandle($hListView)) & @CRLF)

    _GUICtrlListView_Destroy($hListView)

    Return GUIDelete($hGUI)
EndFunc   ;==>Example

Func _IsControlID($iControlID)
    If IsHWnd($iControlID) Then
        $iControlID = _WinAPI_GetDlgCtrlID($iControlID)
    EndIf

    Return IsHWnd(GUICtrlGetHandle($iControlID)) = 1
EndFunc   ;==>_IsControlID

맨 위로

9 _GetAutoItIncludesFromSciTE[편집]

#include <WinAPIEx.au3>

ConsoleWrite(_GetAutoItIncludesFromSciTE() & @CRLF)

; Retrieve the AutoIt includes path from the SciTE process.
Func _GetAutoItIncludesFromSciTE()
    Local $sRelativePath = '..\Include'
	Local Const $sWorkingDir = @WorkingDir
    FileChangeDir(_WinAPI_PathRemoveFileSpec(_WinAPI_GetProcessFileName(ProcessExists('SciTE.exe'))))
    $sRelativePath = _WinAPI_GetFullPathName($sRelativePath)
    FileChangeDir($sWorkingDir)
    Return _WinAPI_PathRemoveBackslash($sRelativePath)
EndFunc   ;==>_GetAutoItIncludesFromSciTE

맨 위로

10 _GetAutoItInstall[편집]

; Get the AutoIt installation folder.

ConsoleWrite(_GetAutoItInstall() & @CRLF)

Func _GetAutoItInstall()
    Return StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", 2, -1) - 1)
EndFunc   ;==>_GetAutoItInstall

맨 위로

11 _GetAutoItInstallEx[편집]

ConsoleWrite(_GetAutoItInstallEx() & @CRLF)

; Get the installation of AutoIt. An improved version of _GetAutoItInstall.
Func _GetAutoItInstallEx()
    Local $aWow6432Node[2] = ['', 'Wow6432Node\'], $aFiles[4] = [3, @ProgramFilesDir, EnvGet("PROGRAMFILES"), EnvGet("PROGRAMFILES(X86)")]
    Local $sFilePath = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\' & $aWow6432Node[@AutoItX64] & 'AutoIt v3\AutoIt\', 'InstallDir')
    If @error Then
        For $A = 1 To $aFiles[0]
            $aFiles[$A] &= '\AutoIt'
            If FileExists($aFiles[$A]) Then
                Return $aFiles[$A]
            EndIf
        Next
        Return SetError(1, 0, '')
    Else
        Return $sFilePath
    EndIf
EndFunc   ;==>_GetAutoItInstallEx

맨 위로

12 _GetAutoItInstallFromSciTE[편집]

ConsoleWrite(_GetAutoItInstallFromSciTE() & @CRLF)

; Retrieve the AutoIt installation path from the SciTE process.
Func _GetAutoItInstallFromSciTE()
    Local $sRelativePath = '..\', $sWorkingDir = @WorkingDir
    FileChangeDir( _WinAPI_PathRemoveFileSpec(_WinAPI_GetProcessFileName(ProcessExists("SciTE.exe"))))
    $sRelativePath = _WinAPI_GetFullPathName($sRelativePath)
    FileChangeDir($sWorkingDir)
    Return _WinAPI_PathRemoveBackslash($sRelativePath)
EndFunc   ;==>_GetAutoItInstallFromSciTE

맨 위로

13 _GetClasses[편집]

; Get ALL Controls Info

Example()

Func Example()
	; Run Calculator
	Run("calc.exe")

	; Wait 10 seconds for the Calculator window to appear.
	Local const $hWnd = WinWait("[CLASS:CalcFrame]", '', 10)

	; Retrieve a list of all the controls in the Calculator window using the handle returned by WinWait.
	MsgBox(4096, '', _GetClasses($hWnd))

	; Close the Calculator window using the handle returned by WinWait.
	WinClose($hWnd)
EndFunc   ;==>Example

; This function returns an @LF-separated list of controls on the specified window.
Func _GetClasses($sTitle, $sText = '')
	Local $iCount_Button = 0, $iCount_Edit = 0, $iCount_Static = 0
	Local $aClasses = StringSplit(WinGetClassList($sTitle, $sText), @LF)
	Local $aClassID[$aClasses[0] + 1] = [$aClasses[0]]

	For $i = 1 To $aClasses[0]
		Select
			Case $aClasses[$i] = "Button"
				$iCount_Button += 1
				$aClassID[$i] = $aClasses[$i] & $iCount_Button
			Case $aClasses[$i] = "Edit"
				$iCount_Edit += 1
				$aClassID[$i] = $aClasses[$i] & $iCount_Edit
				$aClasses[$i] = "Input"
			Case $aClasses[$i] = "Static"
				$iCount_Static += 1
				$aClassID[$i] = $aClasses[$i] & $iCount_Static
				$aClasses[$i] = "Label"
			Case Else
				If $aClasses[$i] <> "" Then
					$aClassID[$i] = $aClasses[$i] & "?"
				EndIf
		EndSelect
	Next

	; Combine the results.
	Local $sReturn = ""

	For $i = 1 To $aClassID[0]
		$sReturn &= $aClassID[$i] & @LF
	Next

	Return $sReturn
EndFunc   ;==>_GetClasses

맨 위로

14 _GetFile[편집]

; FileRead Alternative

Func _GetFile($sFile, $iFormat = 0)
    Local $hFileOpen = FileOpen($sFile, $iFormat)
    If $hFileOpen = -1 Then
        Return SetError(1, 0, "")
    EndIf
    Local $sData = FileRead($hFileOpen)
    FileClose($hFileOpen)
    Return $sData
EndFunc   ;==>_GetFile

맨 위로

15 _GetTitle[편집]

; Get the title of your program.

ConsoleWrite(_GetTitle('Example') & @CRLF)
; The second parameter would normally be @ScriptDir & '\Uninstall.exe' for example, but for this demonstration I'm using the full path.
ConsoleWrite(_GetTitle('Example', @ScriptFullPath) & @CRLF)

Func _GetTitle($sProgramName, $sInstallPath = '')
    Local $aOSArch[2] = ['', ' (64-bit)'], $aPortable[2] = [' (Portable)', '']
    Return $sProgramName & $aOSArch[@AutoItX64] & $aPortable[FileExists($sInstallPath)]
EndFunc   ;==>_GetTitle

맨 위로

16 _GetXML[편집]

; Simple Way Of Parsing XML Data.

#include <Array.au3>

Global $aReturn, $sXMLData

$sXMLData = "<data>This is a Simple example of XML</data><data>This is a Simple example of XML and is the Second String.</data>"
$aReturn = _GetXML($sXMLData, "data")
_ArrayDisplay($aReturn, "_GetXML()")

Func _GetXML($sString, $sData)
    Local $aError[2] = [1, $sString], $aReturn
    $aReturn = StringRegExp('<' & $sData & '></' & $sData & '>' & $sString, '(?s)(?i)<' & $sData & '>(.*?)</' & $sData & '>', 3)
    If @error Then
        Return SetError(1, 0, $aError)
    EndIf
    $aReturn[0] = UBound($aReturn, 1) - 1
    Return SetError(0, 0, $aReturn)
EndFunc   ;==>_GetXML

맨 위로

17 Include Source With Exe[편집]

;recover source .au3 file with /Extract switch
; The above code would be copied into the top of your script. The source location (C:\Test.au3 in my example) is the full path to your script file.
;Once compiled, if you run the script from the Run line with the /Extract switch, it will extact the original .au3 file into the Temp directory and will exit without actually executing the script.
If StringInStr($cmdlineRaw, "/Extract") Then
	FileInstall("C:\Test.au3", @TempDir & "\Test.au3", 1)
	Exit
EndIf

맨 위로

18 _IsANSIFile[편집]

#include <FileConstants.au3>

ConsoleWrite(_IsANSIFile(@ScriptFullPath) & @LF) ; Returns True.

Func _IsANSIFile($sFilePath)
    Return FileGetEncoding($sFilePath) = $FO_READ
EndFunc   ;==>_IsUnicodeFile

맨 위로

19 _IsUnicodeFile[편집]

#include <FileConstants.au3>

ConsoleWrite(_IsUnicodeFile(@ScriptFullPath) & @LF) ; Returns False.

Func _IsUnicodeFile($sFilePath)
    Return FileGetEncoding($sFilePath) = $FO_UNICODE
EndFunc   ;==>_IsUnicodeFile

맨 위로

20 _IsAu3File[편집]

ConsoleWrite(_IsAu3File(@AutoItExe) & @CRLF)
ConsoleWrite(_IsAu3File(@ScriptFullPath) & @CRLF)

; Checks whether the filepath is an au3 file.
Func _IsAu3File($sFilePath)
    Return StringTrimLeft($sFilePath, StringInStr($sFilePath, ".", 2, -1)) = "au3"
EndFunc   ;==>_IsAu3File

맨 위로

21 _IsDefault[편집]

If _IsDefault(Default) Then
    MsgBox(0, "_IsDefault() - 1", "This was a Default variable.")
EndIf

If _IsDefault(-1) Then
    MsgBox(0, "_IsDefault() - 2", "This was a Default variable.")
EndIf

If _IsDefault("Other") Then
    MsgBox(0, "_IsDefault() - 3", "This was a Default variable.")
EndIf

Func _IsDefault($sDefault)
    Return StringRegExp($sDefault, "(?-i)\s|Default|-1|0")
EndFunc   ;==>_IsDefault

맨 위로

22 _IsInTrial[편집]

#include <Date.au3> ; Required for _DateDiff()

ConsoleWrite('Date trial started: ' & @YEAR & '/' & @MON & '/01' & @CRLF & _
        'Today''s date: ' & @YEAR & '/' & @MON & '/' & @MDAY & @CRLF & _
        'Trial period: 30 days' & @CRLF & _
        'Is the trial period still valid: ' & _IsInTrial(@YEAR & '/' & @MON & '/01', 30) & @CRLF)

; Check if a trial period date is still valid.
Func _IsInTrial($sDateString, $iDays)
    Return (_DateDiff('D', $sDateString, _NowCalcDate()) < $iDays)
EndFunc   ;==>_IsInTrial

맨 위로

23 _IsVisible[편집]

; Check if the Notepad Window is visible.

Example()

Func Example()
    ; Run Notepad
    Run("notepad.exe")

    ; Wait 10 seconds for the Notepad window to appear.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    ; Check if the Notepad window is visible and display the appropriate message box.
    If _IsVisible($hWnd) Then
        MsgBox(4096, "", "Notepad is visible.")
    Else
        MsgBox(4096, "", "Notepad isn't visible.")
    EndIf

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)
EndFunc   ;==>Example

; Check if the window is visible.
Func _IsVisible($hWnd)
    Return BitAND(WinGetState($hWnd), 2) = 2
EndFunc   ;==>_IsVisible

맨 위로

24 Open Help File to Desired Page[편집]

; Open help file / Open a desired page

Global Const $sAutoItPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir")

Run(@WindowsDir & "\hh.exe " & $sAutoItPath & "\AutoIt3.chm::/html/functions/GUICtrlCreateUpdown.htm")

맨 위로

25 _RunAU3[편집]

_RunAU3("AU3_Example.txt", '"This is a commandline example!"')

Func _RunAU3($sFilePath,  $sCommandLine = "", $sWorkingDir = "", $iShowFlag = @SW_SHOW, $iOptFlag = 0)
    Return Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sFilePath & '" ' & $sCommandLine, $sWorkingDir, $iShowFlag, $iOptFlag)
EndFunc   ;==>_RunAU3

Func _RunWaitAU3($sFilePath, $sCommandLine = "", $sWorkingDir = "", $iShowFlag = @SW_SHOW, $iOptFlag = 0)
    Local $iPID
    $iPID = RunWait('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sFilePath & '" ' & $sCommandLine, $sWorkingDir, $iShowFlag, $iOptFlag)
    If @error Then
        Return SetError(@error, 1, 0)
    EndIf
    Return $iPID
EndFunc   ;==>_RunWaitAU3

맨 위로

26 Run Any au3 File From Your Program[편집]

; Run Any Au3 File From Your Program

Global Const $sFilePath = @ScriptDir & "\Test.au3"

If @Compiled Then
	Global Const $sFileExe = FileGetShortName(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sFilePath & '"')
	Run($sFileExe)
Else
	Global Const $sFileAu3 = FileGetShortName($sFilePath)
	Run(@AutoItExe & " " & $sFileAu3, "", @SW_HIDE)
EndIf

맨 위로

27 _ScriptName[편집]

ConsoleWrite(_ScriptName() & @CRLF)

; Return the @ScriptName minus the .exe or .au3 extension.
Func _ScriptName()
	Return StringLeft(@ScriptName, StringInStr(@ScriptName, '.', 2, -1) - 1)
EndFunc   ;==>_ScriptName

맨 위로

28 _ScriptVersion[편집]

#NoTrayIcon

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Fileversion=1.2.3.4
#AutoIt3Wrapper_Res_LegalCopyright=2012  www.favessoft.com
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

Global $version = _ScriptVersion()

Global $msg = "ScriptVerDemo" & " " & $version & "  Copyright (c) 2012  www.favessoft.com" & @CRLF & @CRLF

MsgBox(0x1040, "", $msg)

; return File Version string from compiled or .au3 script
; returns "" if no version info available
; Note: The .au3 script must contain #AutoItWrapper
; directives with file version or "" is returned.
Func _ScriptVersion(Const $Script = @ScriptFullPath)
    If StringRight($Script,4) = ".exe" Then
        Return FileGetVersion($Script)
    Else
        Local Const $scriptHandle = FileOpen($Script)
		Local $ver
		Local $found = False
		Local $pos

        If $scriptHandle <> -1 Then
            Do
                $ver = FileReadLine($scriptHandle)
                $sPos = StringInStr($ver, "_Fileversion=")

                If $sPos Then
                    $ver = StringMid($ver, $sPos + StringLen("_Fileversion="))
                    $found = True
                    ExitLoop
                EndIf
            Until StringLeft($ver, 1) <> "#"

            FileClose($scriptHandle)
        EndIf
    EndIf

    If Not $found Then $ver = ""

    Return $ver
EndFunc   ;==>_ScriptVersion

맨 위로

29 _SetFile[편집]

; FileWrite Alternative

Func _SetFile(Const $sString, Const $sFile, Const $iOverwrite = 0)
    Local Const $hFileOpen = FileOpen($sFile, $iOverwrite + 1)

    FileWrite($hFileOpen, $sString)
    FileClose($hFileOpen)

    If @error Then
        Return SetError(1, 0, $sString)
    EndIf

    Return $sString
EndFunc   ;==>_SetFile

맨 위로

30 _ShowHelp[편집]

HotKeySet("{F1}", "_ShowHelp")

Func _ShowHelp()
	Return ShellExecute(@ProgramFilesDir & "\AutoIt3\AutoIt3Help.exe") ; change this to the location of your own helpfile.
EndFunc   ;==>_ShowHelp

맨 위로

31 _SingletonPID[편집]

Local $iSingleton = _SingletonPID('RandomName', 1)

If $iSingleton = 0 Then
    MsgBox(4096, '', 'This is the first instance of the program running: ' & $iSingleton)
Else
    MsgBox(4096, '', 'There is another instance running. This PID is: ' & $iSingleton)
EndIf

; #FUNCTION# ====================================================================================================================
; Name ..........: _SingletonPID
; Description ...: Enforce a design paradigm where only one instance of the script may be running.
; Syntax ........: _SingletonPID($sOccurenceName[, $iFlag = 0])
; Parameters ....: $sOccurenceName      - String to identify the occurrence of the script.
;                  $iFlag               - [optional] Optional parameters. Default is 0.
;                  0 - Exit the script with the exit code -1 if another instance already exists.
;                  1 - Return the PID of the main executable and without exiting the script too.
; Return values .: Success - 0 No other process is running.
;                  Failure - The PID of the main executable.
; Author ........: guinness with initial ideas by Valik for _Singleton & KaFu for _EnforceSingleInstance.
; Example .......: Yes
; ===============================================================================================================================
Func _SingletonPID(Const $sOccurenceName, Const $iFlag = 0)
    Local $hHandle = WinGetHandle($sOccurenceName)

    If @error Then
        AutoItWinSetTitle($sOccurenceName)
        $hHandle = WinGetHandle($sOccurenceName)
        ControlSetText($hHandle, '', ControlGetHandle($hHandle, '', 'Edit1'), @AutoItPID)
    Else
        If BitAND($iFlag, 1) Then
            Return Number(ControlGetText($hHandle, '', ControlGetHandle($hHandle, '', 'Edit1')))
        Else
            Exit -1
        EndIf
    EndIf

    Return 0
EndFunc   ;==>_SingletonPID

맨 위로

32 _Sort[편집]

#include <Constants.au3>

ConsoleWrite(_Sort("$sVariable" & @CRLF & "$iVariable" & @CRLF & "$tVariable" & @CRLF & "$pVariable"))

Func _Sort(Const $sSortList)
    Local Const $iPID = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD), $sOutput = ""

    StdinWrite($iPID, $sSortList)
    StdinWrite($iPID)

    While 1
        $sOutput &= StdoutRead($iPID)

        If @error Then
            ExitLoop
        EndIf
    WEnd

    Return $sOutput
EndFunc   ;==>_Sort

맨 위로

33 Speak Object and Save to WAV File[편집]

; Speak Object and save to wav file





	Local $ObjFile = ObjCreate("Sapi.SpFileStream.1")

	$ObjVoice.Speak($sText)

	$ObjFile.Open($sFilePath, 3)

	$ObjVoice.AudioOutputStream = $ObjFile
EndFunc   ;==>_SpeakToWAV

맨 위로

34 _VariableSwap[편집]

Global $sString_1 = 'This is string 1.'
Global $sString_2 = 'This is string 2.'

ConsoleWrite('$sString_1: ' & $sString_1 & @CRLF)
ConsoleWrite('$sString_2: ' & $sString_2 & @CRLF & @CRLF)

_VariableSwap($sString_1, $sString_2)

ConsoleWrite('$sString_1: ' & $sString_1 & @CRLF)
ConsoleWrite('$sString_2: ' & $sString_2 & @CRLF & @CRLF)

; Swap the contents of two variables.
Func _VariableSwap(ByRef $vVariable_1, ByRef $vVariable_2) ; Similar to _ArraySwap though not obvious to some this isn't limited to arrays.
    Local Const $vTemp = $vVariable_1
    $vVariable_1 = $vVariable_2
    $vVariable_2 = $vTemp
EndFunc   ;==>_VariableSwap

맨 위로

35 _WinAPI_CharLower[편집]

ConsoleWrite(_WinAPI_CharLower("EXAMPLE") & @CRLF) ; Similar to StringLower.

; Convert characters to lowercase.
Func _WinAPI_CharLower($sString)
    Local $aReturn = DllCall('user32.dll', 'wstr', 'CharLowerW', 'wstr', $sString)
    If @error Then
        Return SetError(1, 0, $sString)
    EndIf
    Return $aReturn[0]
EndFunc   ;==>_WinAPI_CharLower

맨 위로

36 _WinAPI_CharUpper[편집]

ConsoleWrite(_WinAPI_CharUpper("example") & @CRLF) ; Similar to StringUpper.

; Convert characters to uppercase.
Func _WinAPI_CharUpper($sString)
	Local $aReturn = DllCall('user32.dll', 'wstr', 'CharUpperW', 'wstr', $sString)
	If @error Then
		Return SetError(1, 0, $sString)
	EndIf
	Return $aReturn[0]
EndFunc   ;==>_WinAPI_CharUpper

맨 위로

37 _WinAPI_PathFileExists[편집]

; An API Alternative To FileExist.

ConsoleWrite(_WinAPI_PathFileExists(@ScriptFullPath) & @LF) ; File.
ConsoleWrite(_WinAPI_PathFileExists("C:\") & @LF) ; Drive.
ConsoleWrite(_WinAPI_PathFileExists(@ProgramFilesDir) & @LF) ; Directory.
ConsoleWrite(_WinAPI_PathFileExists("Z:\File.txt") & @LF) ; Shouldn't exist!

Func _WinAPI_PathFileExists($sFilePath)
    Local $aReturn = DllCall('shlwapi.dll', 'int', 'PathFileExistsW', 'wstr', $sFilePath)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    Return $aReturn[0]
EndFunc   ;==>_WinAPI_PathFileExists

맨 위로

38 _WinActiveByExe[편집]

; Window Active/Activate by Exe, Open Notepad whilst script is running

While 1
    If _WinActiveByExe('notepad.exe', False) Then MsgBox(64, 'info', 'true')
    Sleep(100)
WEnd

Func _WinActiveByExe($sExe, $iActive = True);False to WinActivate, True to just see if it's active
    If Not ProcessExists($sExe) Then Return SetError(1, 0, 0)
    Local $aPL = ProcessList($sExe)
    Local $aWL = WinList()
    For $iCC = 1 To $aWL[0][0]
        For $xCC = 1 To $aPL[0][0]
            If $aWL[$iCC][0] <> '' And _
                WinGetProcess($aWL[$iCC][1]) = $aPL[$xCC][1] And _
                BitAND(WinGetState($aWL[$iCC][1]), 2) Then
                If $iActive And WinActive($aWL[$iCC][1]) Then Return 1
                If Not $iActive And Not WinActive($aWL[$iCC][1]) Then
                    WinActivate($aWL[$iCC][1])
                    Return 1
                EndIf
            EndIf
        Next
    Next
    Return SetError(2, 0, 0)
EndFunc

맨 위로

39 _WindowShake[편집]

; Shake a window left to right.

Example()

Func Example()
    ; Run Notepad
    Run("notepad.exe")

    ; Wait 10 seconds for the Notepad window to appear.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    ; Wait for 1 second.
    Sleep(1000)

    ; Shake the Notepad window left to right.
    _WindowShake($hWnd)

    ; Wait for 1 second.
    Sleep(1000)

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)
EndFunc   ;==>Example

Func _WindowShake($sTitle, $sText = '', $iDistance = 20)
    Local $hWnd = WinGetHandle($sTitle, $sText)
    Local $aWinGetPos = WinGetPos($hWnd)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    Local $aArray[5] = [4, $aWinGetPos[0] + $iDistance, $aWinGetPos[0], $aWinGetPos[0] + $iDistance, $aWinGetPos[0]]

    For $i = 1 To $aArray[0]
        WinMove($hWnd, '', $aArray[$i], Default)
        Sleep(100)
    Next
EndFunc   ;==>_WindowShake

맨 위로

40 _WinGetDetails[편집]

#include <Array.au3>

Global $aArray = _WinGetDetails('[ACTIVE]') ; Returns the Window's title, PID, folder path filename.

If @error Then
    Exit
EndIf

_ArrayDisplay($aArray)

Func _WinGetDetails($sTitle, $sText = '') ; Based on code of _WinGetPath by GaryFrost.
    Local $aReturn[5] = [4, '-WinTitle', '-PID', '-FolderPath', '-FileName'], $aStringSplit

    If StringLen($sText) > 0 Then
        $aReturn[1] = WinGetTitle($sTitle, $sText)
    Else
        $aReturn[1] = WinGetTitle($sTitle)
    EndIf
    $aReturn[2] = WinGetProcess($aReturn[1])

    Local $oWMIService = ObjGet('winmgmts:\\.\root\CIMV2')
    Local $oItems = $oWMIService.ExecQuery('Select * From Win32_Process Where ProcessId = ' & $aReturn[2], 'WQL', 0x30)
    If IsObj($oItems) Then
        For $oItem In $oItems
            If $oItem.ExecutablePath Then
                $aStringSplit = StringSplit($oItem.ExecutablePath, '\')
                $aReturn[3] = ''
                For $A = 1 To $aStringSplit[0] - 1
                    $aReturn[3] &= $aStringSplit[$A] & '\'
                Next
                $aReturn[3] = StringTrimRight($aReturn[3], 1)
                $aReturn[4] = $aStringSplit[$aStringSplit[0]]
                Return $aReturn
            EndIf
        Next
    EndIf
    Return SetError(1, 0, $aReturn)
EndFunc   ;==>_WinGetPath

맨 위로

41 _WinGetNumeratedClassList[편집]

; Description: Retrieves the numerated classes from a window.

Func _WinGetNumeratedClassList($sTitle)
    Local $sClassList = WinGetClassList($sTitle)
    Local $aClassList = StringSplit($sClassList, @LF)
    Local $sRetClassList = "", $sHold_List = "|"
    Local $aiInHold, $iInHold

    For $i = 1 To UBound($aClassList) - 1
        If $aClassList[$i] = "" Then ContinueLoop

        If StringRegExp($sHold_List, "\|" & $aClassList[$i] & "~(\d+)\|") Then
            $aiInHold = StringRegExp($sHold_List, ".*\|" & $aClassList[$i] & "~(\d+)\|.*", 1)
            $iInHold = Number($aiInHold[UBound($aiInHold)-1])

            If $iInHold = 0 Then $iInHold += 1

            $aClassList[$i] &= "~" & $iInHold + 1
            $sHold_List &= $aClassList[$i] & "|"

            $sRetClassList &= $aClassList[$i] & @LF
        Else
            $aClassList[$i] &= "~1"
            $sHold_List &= $aClassList[$i] & "|"
            $sRetClassList &= $aClassList[$i] & @LF
        EndIf
    Next

    Return StringReplace(StringStripWS($sRetClassList, 3), "~", "")
EndFunc

맨 위로

42 _WinGetHandleByPID[편집]

; Get Window Handle by PID

#include <Array.au3>

Global $a1 = _WinGetHandleByPID(232)
Global $a2 = _WinGetHandleByPID("notepad.exe", -1)
Global $a3 = _WinGetHandleByPID("notepad.exe", 0)
Global $a4 = _WinGetHandleByPID("notepad.exe", 1)

_ArrayDisplay($a1, "1")
_ArrayDisplay($a2, "2")
_ArrayDisplay($a3, "3")
_ArrayDisplay($a4, "4")

;$nVisible = -1 "All (Visble or not)", $nVisible = 0 "Not Visible Only", $nVisible = 1 "Visible Only"
Func _WinGetHandleByPID($vProc, $nVisible = 1)
    $vProc = ProcessExists($vProc);

    If Not $vProc Then Return SetError(1, 0, 0)

    Local $aWL = WinList()

    Local $aTemp[UBound($aWL)][2]

	Local $nAdd = 0

    For $iCC = 1 To $aWL[0][0]
        If $nVisible = -1 And WinGetProcess($aWL[$iCC][1]) = $vProc Then
            $nAdd += 1
            $aTemp[$nAdd][0] = $aWL[$iCC][0]
            $aTemp[$nAdd][1] = $aWL[$iCC][1]
        ElseIf $nVisible = 0 And WinGetProcess($aWL[$iCC][1]) = $vProc And _
                BitAND(WinGetState($aWL[$iCC][1]), 2) = 0 Then
            $nAdd += 1
            $aTemp[$nAdd][0] = $aWL[$iCC][0]
            $aTemp[$nAdd][1] = $aWL[$iCC][1]
        ElseIf $nVisible > 0 And WinGetProcess($aWL[$iCC][1]) = $vProc And _
                BitAND(WinGetState($aWL[$iCC][1]), 2) Then
            $nAdd += 1
            $aTemp[$nAdd][0] = $aWL[$iCC][0]
            $aTemp[$nAdd][1] = $aWL[$iCC][1]
        EndIf
    Next

    If $nAdd = 0 Then Return SetError(2, 0, 0) ; No windows found

    ReDim $aTemp[$nAdd + 1][2]

    $aTemp[0][0] = $nAdd

    Return $aTemp
EndFunc

맨 위로


43 _1Dto2DArray[편집]

#include <Array.au3>

Global $aArray_1D[2] = ["Data", "Data"]
_ArrayDisplay($aArray_1D)
_1Dto2DArray($aArray_1D)
_ArrayDisplay($aArray_1D)

Global $aArray_1D[10] = ["Data", "Data", "Data", "Data", "Data", "Data", "Data", "Data", "Data", "Data"]
_ArrayDisplay($aArray_1D)
_1Dto2DArray($aArray_1D, 9)
_ArrayDisplay($aArray_1D)

Func _1Dto2DArray(ByRef $aArray, Const $iAdditionalColumns = 1)
    Local Const $iSize = UBound($aArray, 1)

    Local $aReturn[$iSize][$iAdditionalColumns + 1]

    For $A = 0 To $iSize - 1
        $aReturn[$A][0] = $aArray[$A]
    Next

    $aArray = $aReturn

    Return $aReturn
EndFunc   ;==>_1Dto2DArray

맨 위로

44 _ArrayAddEx[편집]

#include <Array.au3>

Example_1()
Example_2()

Func Example_1()
    Local $aArray_1[1] = ["Data_0"], $iBegin

    $iBegin = TimerInit() ; Start the timer.
    For $i = 1 To 5000
        _ArrayAdd($aArray_1, "Data_" & $i)
    Next
    $iBegin = TimerDiff($iBegin) ; End the timer and find the difference from start to finish.
    ConsoleWrite("_ArrayAdd from Array.au3 >> " & $iBegin & @CRLF)
    _ArrayDisplay($aArray_1)
EndFunc   ;==>Example_1

Func Example_2()
    Local $aArray_2[1] = ["Data_0"], $iBegin, $iDimension, $iCount

    $iBegin = TimerInit() ; Start the timer.
    For $i = 1 To 5000
        _ArrayAddEx($aArray_2, "Data_" & $i, $iDimension, $iCount) ; $iDimension is the overall size of the array & $iCount is the last index number, because regarding the overall size +1 as the next item will give false results as we're increasing the size of the array not by 1 but multiplying 2.
    Next
    $iBegin = TimerDiff($iBegin) ; End the timer and find the difference from start to finish.
    ConsoleWrite("_ArrayAddEx by guinness >> " & $iBegin & @CRLF)
    ReDim $aArray_2[$iCount] ; Remove the empty rows.
    _ArrayDisplay($aArray_2)
EndFunc   ;==>Example_2

Func _ArrayAddEx(ByRef $aArray, $sData, ByRef $iDimension, ByRef $iCount) ; Taken from Array.au3 and modified by guinness to reduce the use of ReDim.
    If IsArray($aArray) = 0 Then
        Return SetError(1, 0, -1)
    EndIf

    If UBound($aArray, 0) <> 1 Then
        Return SetError(2, 0, -1)
    EndIf

    If $iCount = 0 Then
        $iCount = UBound($aArray, 1)
    EndIf

    $iCount += 1
    If ($iCount + 1) >= $iDimension Then
        $iDimension = (UBound($aArray, 1) + 1) * 2
        ReDim $aArray[$iDimension]
    EndIf
    $aArray[$iCount - 1] = $sData
    Return $iCount - 1
EndFunc   ;==>_ArrayAddEx

맨 위로

45 _ArrayEmpty[편집]

#include <Array.au3>

Global $aMain[11] = [10]
_ArrayEmpty($aMain)
_ArrayDisplay($aMain, "Empty 1D Array.")

Global $aMainEx[11][3] = [[10]]
_ArrayEmpty($aMainEx)
_ArrayDisplay($aMainEx, "Empty 2D Array.")

Func _ArrayEmpty(ByRef $aArray)
    Switch UBound($aArray, 0) ; Dimension, 1D or 2D array are supported.
        Case 1
            Local $aEmpty1D[1]
            $aArray = $aEmpty1D

        Case 2
            ; Edit by DatMCEyeBall - Instead of emptying the array to [1][$x] we empty it to [$x][$y]
            ; where $x is the 1st dimensions size and $y the 2nd.
            ; Previous code was: Local $aEmpty2D[1][UBound($aArray, 2)]
            ; This way we preserve the arrays' original size.
            Local $aEmpty2D[UBound($aArray, 1)][UBound($aArray, 2)]
            $aArray = $aEmpty2D
    EndSwitch
EndFunc   ;==>_ArrayEmpty

맨 위로

46 _ArrayGet[편집]

Global $b[2] = ["a", "b"]
Global $a[3][2] = [[0, -1], [$b, "x"], [1, -2]]

Global $c[5] = [11, 22, 33, 44, 55]

MsgBox(0, "", _ArrayGet($a, 1, 0, 1) & " # " & @error)

; #FUNCTION# ====================================================================================================================
; Name ..........: _ArrayGet
; Description ...: Gets a value from a nested multidimensional array
; Syntax ........: _ArrayGet(Byref $aArray, $i1[, $i2 = 0[, $i3 = 0[, $i4 = 0[, $i5 = 0[, $i6 = 0[, $i7 = 0[, $i8 = 0[,
;                 $i9 = 0[, $i10 = 0[, $i11 = 0[, $i12 = 0[, $i13 = 0[, $i14 = 0[, $i15 = 0[, $i16 = 0[, $i17 = 0[,
;                 $i18 = 0[, $i19 = 0[, $i20 = 0]]]]]]]]]]]]]]]]]]])
; Parameters ....: $aArray            - [in/out] An array of unknowns.
;                 $i1                 - first array index.
;                 $i2                 - [optional] second array index.
;                 $i3                 - [optional] third array index.
;                 $i4                 - [optional] fourth array index.
;                 $i5                 - [optional] fifth array index.
;                 $i6                 - [optional] sixth array index.
;                 $i7                 - [optional] seventh array index.
;                 $i8                 - [optional] eighth array index.
;                 $i9                 - [optional] ninth array index.
;                 $i10               - [optional] 10th array index.
;                 $i11               - [optional] 11th array index.
;                 $i12               - [optional] 12th array index.
;                 $i13               - [optional] 13th array index.
;                 $i14               - [optional] 14th array index.
;                 $i15               - [optional] 15th array index.
;                 $i16               - [optional] 16th array index.
;                 $i17               - [optional] 17th array index.
;                 $i18               - [optional] 18th array index.
;                 $i19               - [optional] 19th array index.
;                 $i20               - [optional] 20th array index.
; Return values .: Success: Value at the specified index
;                 Error: Nothing, Sets @error to:
;                 |1 - Trying to acces non-array as array
;                 |2 - Not enough dimensions for the last accessed array
;                 |3 - Index out of bounds for a dimension
;                 @extended contains the dimension in error (according to parameter list)
; Author ........: ProgAndy
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _ArrayGet(ByRef $aArray, $i1, $i2=0, $i3=0, $i4=0, $i5=0, $i6=0, $i7=0, $i8=0, $i9=0, $i10=0, $i11=0, $i12=0, $i13=0, $i14=0, $i15=0, $i16=0, $i17=0, $i18=0, $i19=0, $i20=0)
	#forceref $i1, $i2, $i3, $i4, $i5, $i6, $i7, $i8, $i9, $i10, $i11, $i12, $i13, $i14, $i15, $i16, $i17, $i18, $i19, $i20
   ; ProgAndy
    Local $NULL
    If Not IsArray($aArray) Then Return SetError(1, 1, $NULL)
    Local $iDims = UBound($aArray, 0)
    If @NumParams <= $iDims Then Return SetError(2, @NumParams, $NULL)
    Local $sAccess = "$aArray"
    For $i = 1 To $iDims
        Local $iIndex = Int(Eval("i" & $i))
        If $iIndex >= UBound($aArray, $i) Then Return SetError(3, $i, $NULL)
        $sAccess &= '[' & $iIndex & ']'
    Next
    If @NumParams-1 > $iDims Then ; Still indices left
        For $i = $iDims+1 To @NumParams-1
            $sAccess &= ", $i" & $i
        Next
        Local $vResult = Execute("_ArrayGet(" & $sAccess & ")")
        If @error Then SetError(@error, @extended+$iDims)
        Return $vResult
    Else ;
        Return Execute($sAccess)
    EndIf
EndFunc

맨 위로

47 _ArraySet[편집]

Global $b[2] = ['a', 'b'
Global $a[3][2] = [[0, -1], [$b, "x"], [1, -2]]

Global $c[5] = [11, 22, 33, 44, 55]

_ArraySet($a, $c, 1, 0, 0)

; #FUNCTION# ====================================================================================================================
; Name ..........: _ArraySet
; Description ...: Sets a value from a nested multidimensional array
; Syntax ........: _ArraySet(Byref $aArray, $vValue, $i1[, $i2 = 0[, $i3 = 0[, $i4 = 0[, $i5 = 0[, $i6 = 0[, $i7 = 0[, $i8 = 0[,
;                 $i9 = 0[, $i10 = 0[, $i11 = 0[, $i12 = 0[, $i13 = 0[, $i14 = 0[, $i15 = 0[, $i16 = 0[, $i17 = 0[,
;                 $i18 = 0[, $i19 = 0[, $i20 = 0]]]]]]]]]]]]]]]]]]])
; Parameters ....: $aArray            - [in/out] An array of unknowns.
;                 $vValue             - value to set at specified index.
;                 $i1                 - first array index.
;                 $i2                 - [optional] second array index.
;                 $i3                 - [optional] third array index.
;                 $i4                 - [optional] fourth array index.
;                 $i5                 - [optional] fifth array index.
;                 $i6                 - [optional] sixth array index.
;                 $i7                 - [optional] seventh array index.
;                 $i8                 - [optional] eighth array index.
;                 $i9                 - [optional] ninth array index.
;                 $i10               - [optional] 10th array index.
;                 $i11               - [optional] 11th array index.
;                 $i12               - [optional] 12th array index.
;                 $i13               - [optional] 13th array index.
;                 $i14               - [optional] 14th array index.
;                 $i15               - [optional] 15th array index.
;                 $i16               - [optional] 16th array index.
;                 $i17               - [optional] 17th array index.
;                 $i18               - [optional] 18th array index.
;                 $i19               - [optional] 19th array index.
;                 $i20               - [optional] 20th array index.
; Return values .: Success: True
;                 Error: False, Sets @error to:
;                 |1 - Trying to acces non-array as array
;                 |2 - Not enough dimensions for the last accessed array
;                 |3 - Index out of bounds for a dimension
;                 |all: - @extended contains the dimension in error (according to parameter list)
; Author ........: ProgAndy
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _ArraySet(ByRef $aArray, Const $vValue, $i1, $i2=0, $i3=0, $i4=0, $i5=0, $i6=0, $i7=0, $i8=0, $i9=0, $i10=0, $i11=0, $i12=0, $i13=0, $i14=0, $i15=0, $i16=0, $i17=0, $i18=0, $i19=0, $i20=0)
    ; ProgAndy
    Local Const $NULL = False

    If Not IsArray($aArray) Then Return SetError(1, 1, $NULL)

    Local $iDims = UBound($aArray, 0)

    If @NumParams-2 < $iDims Then Return SetError(2, @NumParams-1, $NULL)

    Local $sAccess = "$aArray"

    For $i = 1 To $iDims
        Local $iIndex = Int(Eval("i" & $i))
        If $iIndex >= UBound($aArray, $i) Then Return SetError(3, $i, $NULL)
        $sAccess &= '[' & $iIndex & ']'
    Next

    If @NumParams-2 > $iDims Then
        $sAccess &= ", $vValue"
        For $i = $iDims+1 To @NumParams-2
            $sAccess &= ", $i" & $i
        Next
        Local $fSuccess = Execute("_ArraySet(" & $sAccess & ")")
        If @error Then SetError(@error, @extended+$iDims)
        Return $fSuccess
    EndIf

    Switch $iDims
        Case 1
            $aArray[$i1] = $vValue
        Case 2
            $aArray[$i1][$i2] = $vValue
        Case 3
            $aArray[$i1][$i2][$i3] = $vValue
        Case 4
            $aArray[$i1][$i2][$i3][$i4] = $vValue
        Case 5
            $aArray[$i1][$i2][$i3][$i4][$i5] = $vValue
        Case 6
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6] = $vValue
        Case 7
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7] = $vValue
        Case 8
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8] = $vValue
        Case 9
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9] = $vValue
        Case 10
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10] = $vValue
        Case 11
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11] = $vValue
        Case 12
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12] = $vValue
        Case 13
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13] = $vValue
        Case 14
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14] = $vValue
        Case 15
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15] = $vValue
        Case 16
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16] = $vValue
        Case 17
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17] = $vValue
        Case 18
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17][$i18] = $vValue
        Case 19
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17][$i18][$i19] = $vValue
        Case 20
            $aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17][$i18][$i19][$i20] = $vValue
	EndSwitch

    Return True
EndFunc

맨 위로

48 _ArrayLength[편집]

Global $aArray[2][50]
ConsoleWrite(_ArrayLength($aArray, 2) & @CRLF) ;= > 10 - Total items
ConsoleWrite(_ArrayLength($aArray, 1) & @CRLF) ;= > 5 - Columns
ConsoleWrite(_ArrayLength($aArray, 0) & @CRLF) ;= > 2 - Rows

ConsoleWrite(@CRLF)

Global $aArray[2]
ConsoleWrite(_ArrayLength($aArray, 2) & @CRLF) ;= > 2 - Total items
ConsoleWrite(_ArrayLength($aArray, 1) & @CRLF) ;= > 1 - Columns
ConsoleWrite(_ArrayLength($aArray, 0) & @CRLF) ;= > 2 - Rows

Func _ArrayLength($aArray, $iType = 1)
    Local $iDim = UBound($aArray, 0)

    If $iDim < 0 Or $iDim > 2 Then ; If not a 1D or 2D Array, then return -1 and set @error to non-zero.
        Return SetError(1, 0, -1)
    EndIf

    Switch $iType
        Case 2
            If $iDim = 2 Then
                Return UBound($aArray, 2) * UBound($aArray, 1)
            Else
                Return UBound($aArray, 1)
            EndIf

        Case 1
            If $iDim = 2 Then
                Return UBound($aArray, 2)
            Else
                Return 1
            EndIf

        Case Else
            Return UBound($aArray, 1)
    EndSwitch
EndFunc   ;==>_ArrayLength

맨 위로

49 _ArraySortNum[편집]

; ArraySortNum(ByRef $nArray, $Ascending = 0, $Start = 1)
; Sorts arrays based on TRUE Numerical Order, including Decimals

#include <Array.au3>

; Example sort Array created with StringSplit.
Global $avArray = StringSplit("6,8,10,4,2,13,12,129,106.1,106.4", ",")

_ArraySortNum($avArray, 1)
_ArrayDisplay($avArray, "Sorted Desc starting at 1")

Func _ArraySortNum(ByRef $nArray, $Ascending = 0, $Start = 1)
	For $i = $Start To UBound($nArray) - 2
		Local $SE = $i

		If $Ascending = 0 Then
			For $x = $i To UBound($nArray) - 1
				If Number($nArray[$SE]) < Number($nArray[$x]) Then $SE = $x
			Next
		Else
			For $x = $i To UBound($nArray) - 1
				If Number($nArray[$SE]) > Number($nArray[$x]) Then $SE = $x
			Next
		EndIf

		Local $HLD = $nArray[$i]

		$nArray[$i] = $nArray[$SE]

		$nArray[$SE] = $HLD
	Next
EndFunc   ;==>_ArraySortNum

맨 위로

50 _AssocArray[편집]

; use Scripting.Dictionary object for simple associative arrays
; with string keys. Key comparisons are case insensitive.

Global $myArray
$myArray = _AssocArray()
If @error Then
    MsgBox(0x1010,"_AssocArray() Error", "Error Creating Associative Array!")
    Exit
EndIf

$myArray("AntiqueWhite") = 0xFAEBD7
$myArray("Black") = 0x000000
$myArray("Blue") = 0x0000FF
$myArray("Brown") = 0xA52A2A
$myArray("CadetBlue") = 0x5F9EA0
$myArray("Chocolate") = 0xD2691E
$myArray("Coral") = 0xFF7F50

MsgBox(0x1040,"","Hex for Chocolate Color is: 0x" & Hex($myArray("Chocolate"),6))
_AssocArrayDestroy($myArray)

Func _AssocArray()
    Local $aArray = ObjCreate("Scripting.Dictionary")

    If @error Then
        Return SetError(1, 0, 0)
    EndIf

    $aArray.CompareMode = 1

    Return $aArray
EndFunc   ;==>_AssocArray

Func _AssocArrayDestroy(ByRef $aArray)
    If Not IsObj($aArray) Then
        Return False
    EndIf
    $aArray.RemoveAll()
    $aArray = 0
    Return True
EndFunc   ;==>_AssocArrayDestroy

맨 위로

51 _DynEnumArray[편집]

Func _DynEnumArray($aArrayToEnum)
    Local $aDims[1][2]=[["ElementIdx","ElementCount"]]   ;Create an Array to Track Dimensions and Elements
    For $iX = 1 to UBound($aArrayToEnum,0)
        ReDim $aDims[$iX+1][2]
        $aDims[$iX][0]=0
        $aDims[$iX][1]=UBound($aArrayToEnum,$iX)
    Next
    Do   ;Loop Through Array Elements
        $sArray = "$aArrayToEnum"
        For $iX = 1 to UBound($aDims)-1
            $sArray &= "[" & $aDims[$iX][0] & "]"
        Next
        ConsoleWrite($sArray & " " & Execute($sArray) & @CRLF)  ;Output Subscript and Value

        $aDims[UBound($aDims)-1][0] += 1   ;Increment Last Dimension Element
        For $iY = UBound($aDims)-2 To 1 Step -1   ;Increment Dimension Element
            If $aDims[$iY+1][0] = $aDims[$iY+1][1] Then
                $aDims[$iY+1][0]=0
                $aDims[$iY][0]+=1
            EndIf
        Next

    Until $aDims[1][0]=$aDims[1][1]
    Return ConsoleWrite(@CRLF)
EndFunc

;Demos
Local $aArray[5]=["Never","Gonna","Give","You","Up"]
_DynEnumArray($aArray)

Local $aArray[6][2]=[["Penn", "Teller"],["Gilbert", "Sullivan"],["Sonny", "Cher"],["Stone", "Parker"],["Fischbacher", "Horn"],["Plant", "Page"]]
_DynEnumArray($aArray)

Local $aArray[2][3][2]=[[["All","Your"],["Base","Are"],["Belong","To Us"]],[["Is","This"],["The","Way"],["Back","Home"]]]
_DynEnumArray($aArray)

맨 위로

52 _FuncListToArray[편집]

$aFlist = _FuncListToArray(@ScriptFullPath)
If NOT @Error Then
   For $i = 0 To Ubound($aFlist) -1
      MsgBox(0, "TEST", $aFlist[$i], 2)
   Next
EndIf

Func _FuncListToArray($sStr)
   If FileExists($sStr) Then $sStr = FileRead($sStr)
   Local $sRegEx = "(?i)(?m:^|\n)\s*Func\s+(\w+)\s*\("
   $aRegEx = StringRegExp($sStr, $sRegEx, 3)
   If IsArray($aRegEx) Then Return $aRegEx
   Return SetError(1)
EndFunc

맨 위로

53 Identify Duplicate Values In Arrays[편집]

; Identify Duplicate Values In Arrays
#include <Array.au3>

Global $a1[3] = [1, 2, 3], $a2[5] = [5, 6, 7, 8, 9], $a3[2] = [3, 5]
Global $a_a[4] = [3, $a1, $a2, $a3]
MsgBox(0, "Dupes?", _SearchForDupes($a_a))

Func _SearchForDupes($a_arrays, $i_ReturnType = 0)
	Local $Dupes[1] = [0]

	If $a_arrays[0] < 2 Then Return ''

	For $i = 1 To $a_a[0] - 1
		For $j = $i + 1 To $a_a[0]
			_FindDupe($a_a[$i], $a_a[$j], $Dupes)
		Next
	Next

	If $Dupes[0] = 0 Then Return ''

	_ArraySort($Dupes)

	If Not $i_ReturnType Then
		Local $s_return = ''

		For $x = 1 To $Dupes[0]
			$s_return &= $Dupes[$x] & ','
		Next
		Return StringTrimRight($s_return, 1)
	Else
		Return $Dupes
	EndIf
EndFunc   ;==>_SearchForDupes

Func _FindDupe(ByRef $a_array01, ByRef $a_array02, ByRef $Dupes)
	Local $found = False

	For $i = 0 To UBound($a_array01) - 1
		For $j = 0 To UBound($a_array02) - 1
			If $a_array01[$i] = $a_array02[$j] Then
				$found = False

				For $x = 1 To $Dupes[0]
					If $Dupes[$x] = $a_array01[$i] Then
						$found = True
						ExitLoop
					EndIf
				Next

				If Not $found Then
					$Dupes[0] += 1
					ReDim $Dupes[$Dupes[0] + 1]
					$Dupes[$Dupes[0]] = $a_array01[$i]
				EndIf
			EndIf
		Next
	Next
EndFunc   ;==>_FindDupe

맨 위로

54 _Is1DArray[편집]

Local $sString = 'String'
Local $a1DArray[2] = [1, 'Row_1']
Local $a2DArray[2][2] = [[1],['Row_1: Col_1', 'Row_1: Col_2']]

ConsoleWrite('Is the variable $sString a 1D Array?: ' & _Is1DArray($sString) & @CRLF)
ConsoleWrite('Is the variable $a1DArray a 1D Array?: ' & _Is1DArray($a1DArray) & @CRLF)
ConsoleWrite('Is the variable $a2DArray a 1D Array?: ' & _Is1DArray($a2DArray) & @CRLF)

; Check if a variable is a 1D Array.
Func _Is1DArray(ByRef Const $aArray)
	Return UBound($aArray) And (UBound($aArray, 0) = 1)
EndFunc   ;==>_Is1DArray

맨 위로

55 _Is2DArray[편집]

Local $sString = 'String'
Local $a1DArray[2] = [1, 'Row_1']
Local $a2DArray[2][2] = [[1],['Row_1: Col_1', 'Row_1: Col_2']]

ConsoleWrite('Is the variable $sString a 1D Array?: ' & _Is2DArray($sString) & @CRLF)
ConsoleWrite('Is the variable $a1DArray a 1D Array?: ' & _Is2DArray($a1DArray) & @CRLF)
ConsoleWrite('Is the variable $a2DArray a 1D Array?: ' & _Is2DArray($a2DArray) & @CRLF)

; Check if a variable is a 2D Array.
Func _Is2DArray(ByRef Const $aArray)
	Return UBound($aArray) And (UBound($aArray, 0) = 2)
EndFunc   ;==>_Is2DArray

맨 위로

56 _IsInBounds[편집]

#include <Constants.au3>

Local $aArray[5] = ['Item_1', 'Item_2', 'Item_3', 'Item_4', 'Item_5']

ConsoleWrite(_IsInBounds($aArray, 1) & @CRLF) ; Returns True as the Array has 5 items.
ConsoleWrite(_IsInBounds($aArray, 5) & @CRLF) ; Returns False as the Array has 5 items but starts from the 0th index not 1st.
ConsoleWrite(_IsInBounds($aArray, 0) & @CRLF) ; Returns True.

If _IsInBounds($aArray, 4) Then
	MsgBox($MB_SYSTEMMODAL, '', 'Position 4 contains the value: "' & $aArray[4] & '"')
EndIf

Func _IsInBounds(ByRef Const $aArray, $iIndex)
	Local $iDim = UBound($aArray, 0)
	If $iDim < 0 Or $iDim > 2 Then ; If not a 1D or 2D Array, then return -1 and set @error to non-zero.
		Return SetError(1, 0, False)
	EndIf
	Return $iIndex < UBound($aArray, 1)
EndFunc   ;==>_IsInBounds

맨 위로

57 _MultiFileListToArray[편집]

; Multiple File List to Array

$Files_List = _MultiFileListToArray(@ScriptDir, "*.txt|*.ini")

; for display only
$GUI = GUICreate(" _MultiFileListToArray - DEMO")
$Edit1 = GUICtrlCreateEdit("", 50, 50, 300, 300)
For $x = 1 To UBound($Files_List) - 1
    GUICtrlSetData(-1, $Files_List[$x] & @CRLF, 1)
Next
GUISetState()

While GUIGetMsg() <> -3
WEnd
; end display only

Func _MultiFileListToArray($sPath, $sFilter = "*", $iFlag = 0)
    Local $hSearch, $sFile, $asFileList[1], $sCount
    If Not FileExists($sPath) Then Return SetError(1, 1, "")
    If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
    $sFilter = (StringSplit($sFilter, "|"))
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
    For $sCount = 1 To $sFilter[0]
        $hSearch = FileFindFirstFile($sPath & "\" & $sFilter[$sCount])
        If $hSearch = -1 Then
            If $sCount = $sFilter[0] Then Return SetError(4, 4, $asFileList)
            ContinueLoop
        EndIf
        While 1
            $sFile = FileFindNextFile($hSearch)
            If @error Then
                SetError(0)
                ExitLoop
            EndIf
            If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop
            If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop
            ReDim $asFileList[UBound($asFileList) + 1]
            $asFileList[0] = $asFileList[0] + 1
            $asFileList[UBound($asFileList) - 1] = $sFile
        WEnd
        FileClose($hSearch)
    Next
    Return $asFileList
EndFunc   ;==>_MultiFileListToArray

맨 위로

58 Return Min or Max Number From One or Two Arrays[편집]

#include <Array.au3>

Func _MinMaxa($a_nums01, $MaxFlag = 0, $a_nums02 = 0)
   If Not IsArray($a_nums01) Then
      SetError(1)
      Return (0)
   EndIf

   If @NumParams = 3 Then
      If Not IsArray($a_nums02) Then
         SetError(3)
         Return (0)
      EndIf
   EndIf

   Local $idx

   For $idx = 0 To UBound($a_nums01) - 1
      If StringIsFloat($a_nums01[$idx]) Or StringIsInt($a_nums01[$idx]) Then
         $a_nums01[$idx] = Number($a_nums01[$idx])
      Else
         SetError(2)
         Return (0)
      EndIf
   Next

   _ArraySort($a_nums01, $MaxFlag)

   If @NumParams = 3 Then
      For $idx = 0 To UBound($a_nums02) - 1
         If StringIsFloat($a_nums02[$idx]) Or StringIsInt($a_nums02[$idx]) Then
            $a_nums02[$idx] = Number($a_nums02[$idx])
         Else
            SetError(4)
            Return (0)
         EndIf
	  Next

      _ArraySort($a_nums02, $MaxFlag)

	  If $MaxFlag Then
         If Number($a_nums01[0]) > Number($a_nums02[0]) Then
            Return $a_nums01[0]
         Else
            Return $a_nums02[0]
         EndIf
      Else
         If Number($a_nums01[0]) < Number($a_nums02[0]) Then
            Return $a_nums01[0]
         Else
            Return $a_nums02[0]
         EndIf
      EndIf
   EndIf

   Return $a_nums01[0]
EndFunc ;==>_MinMaxa

맨 위로