Leaderboard
Popular Content
Showing content with the highest reputation on 07/13/2021 in all areas
-
#AutoIt3Wrapper_Au3Check_Parameters=-d -w- 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_UseX64=Y Opt( "MustDeclareVars", 1 ) Example() Func Example() Local $oDict = ObjCreate( "Scripting.Dictionary" ) $oDict.Item( "Int" ) = 1 $oDict.Item( "Flt" ) = 1.1 $oDict.Item( "Str" ) = "One" Local Const $aArray[1] = [ $oDict ] ; Local Const $oDict = 0 ConsoleWrite( "$aArray[0].Item( ""Int"" ) = " & $aArray[0].Item( "Int" ) & @CRLF ) ConsoleWrite( "$aArray[0].Item( ""Flt"" ) = " & $aArray[0].Item( "Flt" ) & @CRLF ) ConsoleWrite( "$aArray[0].Item( ""Str"" ) = " & $aArray[0].Item( "Str" ) & @CRLF & @CRLF ) Local $oMyDict = $aArray[0] $oMyDict.Item( "Int" ) = 2 $oMyDict.Item( "Flt" ) = 2.2 $oMyDict.Item( "Str" ) = "Two" $oMyDict = 0 ConsoleWrite( "$aArray[0].Item( ""Int"" ) = " & $aArray[0].Item( "Int" ) & @CRLF ) ConsoleWrite( "$aArray[0].Item( ""Flt"" ) = " & $aArray[0].Item( "Flt" ) & @CRLF ) ConsoleWrite( "$aArray[0].Item( ""Str"" ) = " & $aArray[0].Item( "Str" ) & @CRLF & @CRLF ) EndFunc Console output: $aArray[0].Item( "Int" ) = 1 $aArray[0].Item( "Flt" ) = 1.1 $aArray[0].Item( "Str" ) = One $aArray[0].Item( "Int" ) = 2 $aArray[0].Item( "Flt" ) = 2.2 $aArray[0].Item( "Str" ) = Two2 points
-
Binary replacement by byte position
Chuckero and one other reacted to JockoDundee for a topic
simple like this: FileCopy("test.txt", "test.txt.new", 1) $hFile = FileOpen("test.txt.new", 1 + 16) FileSetpos($hFile, 17, 0) FileWrite($hfile, Binary("abc")) FileClose($hFile)2 points -
During code troubleshooting, the data display functions _ArrayDisplay(), _DebugArrayDisplay() and _WinAPI_DisplayStruct() can be useful to provide a quick visual overview of the contents of arrays and DllStructs. However, these functions each have their own built-in message loop, which will block the code in the main script. In many cases the code in the main script cannot stand to be blocked in this way and will therefore fail. That is, the troubleshooting functions themselves cause an error. And that, of course, isn't an appropriate situation. This example shows how to execute the data display functions in their own processes, to avoid blocking the code in the main script. Other Examples Unblocking a Blocked Message Handler Unblocking a Blocked Message Handler is about several data display functions that mutually block each other, and how to get around this problem. But the example is not about how to avoid the main script from being blocked. In this new example, data display functions will not block each other nor will they block the main script. The IdeaThe main issue in running a data display function in its own process is passing data to the function. The idea is to use a system global ROT object to pass data from the main script to the data display function. The two major advantages of using a ROT object are that it's a very fast data passing method and that the method preserves data types. However, a ROT object can only be used to pass COM compatible data types. An array is such a COM compatible data type (an AutoIt array is not directly COM compatible, but internally it is stored as a safearray of variants that is COM compatible). A DllStruct isn't COM compatible (nor is it processed by internal COM conversions). To pass a DllStruct, we must first convert data to binary data, which is COM compatible. Once the binary data has been passed, it must again be converted back to a DllStruct. The technique is discussed in the DllStruct section of IPC Techniques through ROT Objects. The CodeThe code is implemented as a complete UDF, NonBlockingDataDisplay.au3. The essential code for creating ROT objects is contained in IRunningObjectTable.au3. AccVars.au3 as well as Variant.au3 and SafeArray.au3 contains code to convert a DllStruct to binary data. Two functions at bottom of the new UDF handles the details of DllStruct to binary conversion. RunArrayDisplay() is the UDF function to execute _ArrayDisplay() in a standalone process: Func RunArrayDisplay( _ $sPath, _ ; Path to Includes ended with "\" $aArray, _ $iFlags = 0, _ ; 0 -> 32 bit code, 1 -> 64 bit code $sTitle = "ArrayDisplay", _ $sHeader = Default ) ; Create data transfer object (ROT-object) Local $sDataTransferObject = "DataTransferObject" & ROT_CreateGUID() ROT_RegisterObject( Default, $sDataTransferObject ) ; Default => Object = Dictionary object Local $oDataTransferObject = ObjGet( $sDataTransferObject ) ; Dictionary object ; Add data to transfer object $oDataTransferObject.Add( "$aArray", $aArray ) $oDataTransferObject.Add( "$sTitle", $sTitle ) $oDataTransferObject.Add( "$sHeader", $sHeader ) ; Run _ArrayDisplay() in another process $g_aDataDisplayProgPids[$g_iDataDisplayProgPids] = BitAND( $iFlags, 1 ) _ ? Run( @AutoItExe & " /AutoIt3ExecuteScript " & $sPath & '"RunArrayDisplay64.au3" ' & $sDataTransferObject ) _ ; 64 bit code : Run( @AutoItExe & " /AutoIt3ExecuteScript " & $sPath & '"RunArrayDisplay32.au3" ' & $sDataTransferObject ) ; 32 bit code $g_iDataDisplayProgPids += 1 EndFunc The function executes Includes\RunArrayDisplay64.au3: #AutoIt3Wrapper_UseX64=Y #include <Array.au3> RunDataDisplay() Func RunDataDisplay() ; Get data transfer object Local $sDataTransferObject = $CmdLine[1] ; Get data from transfer object Local $oDataTransferObject = ObjGet( $sDataTransferObject ) Local $aArray = $oDataTransferObject.Item( "$aArray" ) Local $sTitle = $oDataTransferObject.Item( "$sTitle" ) Local $sHeader = $oDataTransferObject.Item( "$sHeader" ) ; Show array _ArrayDisplay( $aArray, $sTitle, "", 0, Default, $sHeader ) EndFunc Examples\RunArrayDisplay64.au3 is the example that demonstrates the use of RunArrayDisplay(). Run the example in SciTE with F5. #AutoIt3Wrapper_Au3Check_Parameters=-d -w- 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_UseX64=Y Opt( "MustDeclareVars", 1 ) #include "..\Includes\NonBlockingDataDisplay.au3" Example() Func Example() ; Create array Local $aArray[1000][10] For $i = 0 To 1000 - 1 For $j = 0 To 9 $aArray[$i][$j] = $i & "/" & $j Next Next ; Display array RunArrayDisplay( "..\Includes\", $aArray, 1 ) ; 1 -> 64 bit code ; Modify array For $j = 0 To 9 $aArray[0][$j] = "Zero/" & $j Next ; Display array RunArrayDisplay( "..\Includes\", $aArray, 1, "ArrayDisplay 2", "C 0|C 1|C 2|C 3|C 4|C 5|C 6|C 7|C 8|C 9" ) ; The script isn't blocked While Sleep( 1000 ) ConsoleWrite( "The script isn't blocked" & @CRLF ) WEnd EndFunc ExamplesIn the Examples folder, there are three more examples. RunArrayDisplay32.au3 is a 32 bit version of RunArrayDisplay64.au3. RunDebugArrayDisplay64.au3 demonstrates the use of RunDebugArrayDisplay() in the UDF. A prerequisite for running the example is that you're using an AutoIt version that includes _DebugArrayDisplay(). The AutoIt version isn't checked in the code. RunDisplayStruct64.au3 demonstrates the use of RunDisplayStruct() in the UDF. The example is based on the example of _WinAPI_DisplayStruct() in the help file. 7z-fileThe 7z-file contains source code for UDFs and examples. You need AutoIt 3.3.12 or later. Tested on Windows 7 and Windows 10. Comments are welcome. Let me know if there are any issues. NonBlockingDataDisplay.7z1 point
-
AutoIt v3.3.15.4 Beta
coffeeturtle reacted to Jon for a topic
AutoIt v3.3.15.4 Beta View File AutoIt: - Changed: PCRE regular expression engine updated to 8.44. - Added: doc pages about ControlID/Handle and String/Encoding. - Added #2375: SetError(), SetExtended() doc precision. - Added #3780: WinSetTitle() on notepad.exe is reverted when the windows get focus starting Windows 19H1 !!! - Added #3222: Doc precision for statement with 2 FileInstall(). - Added: ConsoleWrite() preserves the @error and @extended. - Added: ConsoleWriteError() preserves the @error and @extended. - Added #2938: Add "GetCount" to ControlCommand() - Added #3539: FileGetTime() UTC. - Added #3808: ProgressOn()/ProgressSet() - size of the progress window - Fixed: Missing Opt("SetExitCode", 1) and AutoIt3 Exit codes in doc. - Fixed #3211: Doc precision for hwnd parameter in Pixel*() functions. - Fixed #3774: Doc precision about Null keyword comparison. - Fixed #3579: DllStructGetData() doc precision. - Fixed #3823: Language Reference - Variables typo. - Fixed #3021: bad obj calling. - Fixed #3106: StringIsFloat() doesn't accept a valid FP exponent. - Fixed #3135: StdioClose memory leak. - Fixed #3165: Call UBound Array[0] AutoIt Crash. - Fixed #3167: Com error handler not called. - Fixed #3179: Number() failure with lower case hex. - Fixed #3182: MouseMove() on multiple screens. - Fixed #3232: Issue when parsing scientific notation literals. - Fixed #3659: InetClose() always false. - Fixed #3682: GuiCtrlCreatePic() with h=0 and w=0. - Fixed #3701: Crash with array 2^24. - Fixed #3710: @OSVersion for Server 2019. - Fixed #3743: [LAST] and WinWaitClose(), WinExists(), WinGetHandle(), etc. - Fixed #3772: int64 = -9223372036854775808 not handled properly. - Fixed #3778: ToolTip() position. - Fixed #3789: FileRead() on big ANSI file (1Gb). - Fixed #3790: UCS2 compare empty string. - Fixed #3807: GUISetIcon() in taskbar. - Fixed #3809: WinGetTitle() on windows created with _WinAPI_CreateWindowEx(). - Fixed #3817: Double to Int64 conversion. AutoItX: - Fixed: run*() showflag default SW_SHOWNORMAL. Aut2Exe: - Fixed #2383: Aut2exe GUI dropped files. - Added #3684: Aut2exe title with version. Au3Check: - Fixed #3785: Crash if too many includes. Au3info: - Added #3938: DPI scaling Support. UDFs: - Changed: Updated used Excel constant enumerations in ExcelConstants.au3 to Excel 2016. - Added #3514: _GUICtrlTreeView_GetLastItem() (Thanks Crazzy). - Added #3611: _GUICtrlListView_SetBkHBITMAP() (Thanks Alofa). - Added #3695: _SQLite_Display2DResult() 2 additional parameters $sDelim_Col and $sDelim_Row. - Added #3675: WinNET.au3 $tagNETRESOURCE: Add constants. - Added #3740: _ChooseColor() support Custom colors (Thanks argumentum). - Added #3547: _FormatAutoItExitCode() and _FormatAutoItExitMethod(). - Added #3696: _ArrayFromString(). - Added #3771: ColorConstants.au3 now include all W3C extended colors. THIS IS A small SCRIPT BREAKING CHANGE - Added #3739: _Array2DCreate(). - Added #3550: _Date_Time_SystemTimeToDateTimeStr() support 2 new formats to return GMT or ISO8601 format. - Added: _WinAPI_CreateProcess() example. - Added #3804: _GUICtrlMenu_CreateMenu() example to demonstrate menuclick non blocking. - Added #3806: _GDIPlus_GraphicsDrawString() with AlphaColor font. - Added #3811: _SQLite_Startup() new parameter to allow return AutoIt Type variables by _SQLite_FetchData(). - Added: _GUICtrlListView_GetSelectedIndices() optimisation (Thanks pixelsearch). - Added: _WinAPI_GetProcessName() and _WinAPI_GetParentProcessName() doc example (Thanks argumentum). - Added #3813: _MemGlobalRealloc(). - Added #3816: _WinAPI_ReadDirectoryChanges() example with magic number. - Fixed #3819: _FileCountLines() can use file handle. - Added: SpeedUp display and sorting of ArrayDisplay() and _DebugArrayDisplay() (Thanks LarsJ). - Fixed #3647: _GDIPlus_ImageResize() ghost border. - Fixed #3650: _GDIPlus_ImageResize() off by one. - Fixed #3633: _GUICtrlRichEdit_GotoCharPos() does not detect end of text. - Fixed #3765: _FileWriteLog() using Handle Cannot insert atvthe beginning, just set @extended. - Fixed #3776: __EventLog_DecodeDesc(). - Fixed: _GUICtrlListView_SetItemChecked() regression and more GUIListview.au3 functions. - Fixed: _WinAPI_CreateEvent() return error on already define $sName. - Fixed: use "wstr" for "ptr" with Null value. - Fixed #3791: _ArrayDisplay() sort arrow. - Fixed #3805: $tagRID_DEVICE_INFO_KEYBOARD definition. - Fixed #3810: _ArrayUnique not handling "Default" for Parameter $iIntType. - Fixed: _WinAPI_DragQueryFileEx() $iflag behavior when mix drag (Thanks pixelsearch). - Fixed #3812: _DateTimeSplit() returning @error. - Fixed #3814: $PAGE_ connstants for _WinAPI_CreateFileMapping(). - Fixed #3821: _WinAPI_OemToChar() with string greater than 65536 crash. - Fixed: _Now(), _NowCalc(), ... date time coherency when call just on hour change. (Thanks argumentum). - Fixed #3824: _GUICtrlRichEdit_StreamToFile(), _GUICtrlRichEdit_StreamFromFile() default encoding doc. - Fixed #3825: beta regression for $tagEDITSTREAM in x64. Submitter Jon Submitted 06/12/2021 Category Beta1 point -
Is there a problem with that notation when using a standalone variable for the index, yes -- which neither of us did. Is there a problem with that notation when using a literal as an index, no. The reported issue seems to be related to using a standalone variable as in index. When using that notation, I have had success with using a literal, an expression, or an enum as an index without any issues. Hopefully the fix allows standalone variables to be used also. If you have more questions, comments, or concerns related to the reported issue, it would probably be best to start a new topic. Example: #include <WinAPIDiag.au3> Enum $THREE = 3, $FOUR Global $i5 = 5, $i6 = 6 $tData = DllStructCreate("ushort value[8]") $tData.value(1) = 1 $tData.value(2) = 2 $tData.value($THREE) = 3 $tData.value($FOUR) = 4 $tData.value($i5) = 5 ;fails $tData.value($i6) = 6 ;fails $tData.value($i5+2) = 7 $tData.value(8) = 8 _WinAPI_DisplayStruct($tData, "ushort value[8]")1 point
-
@Lion66 you are welcome. Great catch on the removal of the _cveNormalize. With $CV_TM_CCOEFF_NORMED (5) as matchMethod, an optimum value ($tmaxval.max in this case) which is less than 0.75 can be considered as a false match. Your match is wrong for at least 2 reasons: Canny on the image + Resize + Canny rarely gives expected results The match rectangle has incoherent values. Why - 5 ? Why +15? Here is a modified version that gives expected result. #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GDIplus.au3> #include <Memory.au3> #include <GUIConstantsEx.au3> #include <Array.au3> #include <emgucv-autoit-bindings\cve_extra.au3> ;start dll opencv _GDIPlus_Startup() _OpenCV_DLLOpen("libemgucv-windesktop-4.5.2.4673\libs\x64\cvextern.dll") Local $matEmpty = _cveMatCreate() #Region Template ;Load template Local $ptemp = _cveImreadAndCheck("Template.png") ;Opencv function to load image ;// Create a destination image to hold output ;//smooth and converting the original image into grayscale Local $TemplateGray = _cveMatCreate() ;_cveSmoothMat($ptemp, $ptemp, $CV_GAUSSIAN, 3, 3) ; _cveCvtColorMat($ptemp, $TemplateGray, $CV_BGR2GRAY) ; _cveCannyMat($TemplateGray, $TemplateGray, 50, 200) ; kontyre #EndRegion Template #Region Image ;Load image from file Local $pimg = _cveImreadAndCheck("bridge200p.jpg") ;Opencv function to load image ;// Create a destination image to hold output ;//smooth and converting the original image into grayscale Local $pimgGrayScale = _cveMatCreate() ;_cveSmoothMat($pimg, $pimg, $CV_GAUSSIAN, 3, 3) ; _cveCvtColorMat($pimg, $pimgGrayScale, $CV_BGR2GRAY) ; ; Canny + Resize + Canny will give wrong matches ; _cveCannyMat($pimgGrayScale, $pimgGrayScale, 50, 200) ; kontyre ;_cvEqualizeHistMat( $pimgGrayScale, $pimgGrayScale ) ; osvetlit' #EndRegion Image ; show input image ; _cveImshowMat("Image", $pimgGrayScale) ; show template image ; _cveImshowMat("Template", $TemplateGray) Local $width2 = _cveMatGetWidth($TemplateGray) Local $height2 = _cveMatGetHeight($TemplateGray) Local $pimgResized, $scale, $width, $height, $rw, $rh, $presult Local $CurMaxVal = 0, $CurLocX = 0, $CurLocY = 0, $CurScale = 1 Local $tBlackColor = _cvScalar(0) Local $tRedColor = _cvRGB(255, 0, 0) Local $tWhiteColor = _cvRGB(255, 255, 255) Local $tDsize = _cvSize(0, 0) For $i = 1.5 To 2.5 Step 0.25 ;//Resize image $scale = $i $tDsize.width = _cveMatGetWidth($pimgGrayScale) / $scale $tDsize.height = _cveMatGetHeight($pimgGrayScale) / $scale If ($tDsize.width < $width2) Or ($tDsize.height < $height2) Then ExitLoop EndIf $pimgResized = _cveMatCreate() _cveResizeMat($pimgGrayScale, $pimgResized, $tDsize, 0, 0, $CV_INTER_LINEAR) _cveCannyMat($pimgResized, $pimgResized, 50, 200) ; Canny after resize will give better results $width = _cveMatGetWidth($pimgResized) $height = _cveMatGetHeight($pimgResized) $rw = $width - $width2 + 1 $rh = $height - $height2 + 1 ;// Create Opencv matrix object 32 bit floating $presult = _cveMatCreate() _cveMatCreateData($presult, $rh, $rw, $CV_32FC1) ;// Template matching _cveMatchTemplateMat($pimgResized, $TemplateGray, $presult, $CV_TM_CCOEFF_NORMED, $matEmpty) ;// Create minmax variables to pass to opencv Local $tmaxloc = DllStructCreate($tagCvPoint) Local $tminloc = DllStructCreate($tagCvPoint) Local $tmaxval = DllStructCreate("double max;") Local $tminval = DllStructCreate("double min;") ;// create mask to ;// Find location of maximum _cveMinMaxLocMat($presult, $tminval, $tmaxval, $tminloc, $tmaxloc, $matEmpty) ; Local $tImgRect = _cvRect($tmaxloc.x - 5, $tmaxloc.y - 5, $width2 + 15, $height2 + 15) Local $tImgRect = _cvRect($tmaxloc.x, $tmaxloc.y, $width2, $height2) _cveRectangleMat($pimgResized, $tImgRect, $tWhiteColor, 1, $CV_LINE_8, 0) $tImgRect = 0 ;// Update input image _cveImshowMat("", $pimgResized) ConsoleWrite("Scale: " & $scale & " " & $tmaxval.max & @CRLF) If $CurMaxVal < $tmaxval.max Then $CurMaxVal = $tmaxval.max $CurScale = $scale $CurLocX = $tmaxloc.x * $scale $CurLocY = $tmaxloc.y * $scale MsgBox(0, "", "Changed. Scale: " & $scale) EndIf Sleep(1000) _cveMatRelease($presult) ; _cveMatRelease($pimgResized) ; Next ;// Mask it to find others if exists and draw red rectangle on input image ;_cveRectangle($pmask, _cvPoint($CurLocX - 5, $CurLocY - 5), _cvPoint($CurLocX + $width2, $CurLocY + $height2), $tBlackColor, -1, 8, 0) Local $tImgRect = _cvRect($CurLocX, $CurLocY, $width2 * $CurScale, $height2 * $CurScale) _cveRectangleMat($pimg, $tImgRect, $tRedColor, 1, 8, 0) $tImgRect = 0 ;// Update input image ;_cveImshowMat("Example-Resize", $pimgResized) _cveImshowMat("", $pimg) _cveWaitKey() $tDsize = 0 $tWhiteColor = 0 $tRedColor = 0 $tBlackColor = 0 _cveMatRelease($ptemp) _cveMatRelease($TemplateGray) _cveMatRelease($pimg) ; _cveMatRelease($pimgGrayScale) ; _cveMatRelease($matEmpty) ; _cveDestroyAllWindows() _Opencv_DLLClose() _GDIPlus_Shutdown() Exit1 point
-
SharkyEXE, I see the "centred" word on my screen. As explained earlier in the thread, at times the Windows seems to return a width value for a string which does then not fit the text when displayed! Despite lots of experimentation I cannot find a reliable solution - it seems to be a combination of specific font sizes and specific display parameters. I suggest you add a couple of pixels to the "width" value returned by the StringSize UDF - which does already add a few pixels as a margin in both directions: ; Get the size of label needed to hold the text $aRet = _StringSize("Both vertically" & @CRLF & "and horizontally centered", 10) ; Add a couple of pixels to the width $aRet[2] += 2 Not the most elegant of solutions, but the only one I can offer you. M231 point
-
If I have a Const variable, can I delete it?
Earthshine reacted to water for a topic
Setting a variable/Array to Const is kind of a security measure to prevent unintended modification. Remove Const and do the "security" checking yourself. When you are ready to put your script into production scan the code for the name of the array and make sure that none of the found lines changes the array. Have a careful look at parameters as the name of the array parameter might change.1 point -
Lots of people here are just programmers for the fun of it, or a hobby as another way of stating it. There are professionals and experts in the field of programming over many types of of languages. If this were a professional company the people in charge would shake your hand, and show you the door as you quickly as you entered. Who are you? What company do you work for? What position do you hold in relation to the company? etc.1 point
-
Security questions for AutoIT approval
argumentum reacted to spudw2k for a topic
Soliciting likes? @BradBurke From my experience and knowledge, AutoIt won't do anything it isn't told to. So as far as how safe and secure is it, all depends on the script author.1 point -
[HELP] Read ini-file to Array
Trong reacted to argumentum for a topic
ini2code4build() Func ini2code4build() Local $hTimer = TimerInit(), $iCols = 0, $ini = @ScriptDir & "\zWebServer.ini" Local $aIniSectionNames = IniReadSectionNames($ini) ;~ _DebugArrayDisplay($aIniSectionNames, "$aIniSectionNames") Local $aTemp, $aArray[$aIniSectionNames[0] + 1][2] For $n = 1 To $aIniSectionNames[0] $aArray[$n][0] = $aIniSectionNames[$n] $aArray[$n][1] = IniReadSection($ini, $aIniSectionNames[$n]) If $iCols < UBound($aArray[$n][1]) Then $iCols = UBound($aArray[$n][1]) Next Local $aReturn3D[$aIniSectionNames[0] + 1][$iCols][2] For $n1 = 1 To $aIniSectionNames[0] $aTemp = $aArray[$n1][1] If Not IsArray($aTemp) Then ContinueLoop $aReturn3D[$n1][0][0] = $aIniSectionNames[$n1] ; this holds the section name For $n2 = 1 To UBound($aTemp) - 1 For $n3 = 0 To UBound($aTemp, 2) - 1 $aReturn3D[$n1][$n2][$n3] = $aTemp[$n2][$n3] Next Next Next ConsoleWrite('--- TimerDiff: ' & TimerDiff($hTimer) & @CRLF) ; 2 ms. is not that much time ; but lets build an Enumerator, for fast esay calling of a 2D array Local $iCount = 0, $sArray = "", $sEnum = "", $prefixForEnum = "will use the SECTION for this", $prefixForArray = "so you can read it. You will find this useful." For $n1 = 1 To UBound($aReturn3D, 1) - 1 $prefixForEnum = '$e' & $aReturn3D[$n1][0][0] $prefixForArray = $aReturn3D[$n1][0][0] ;~ ConsoleWrite('+ >[' & $aReturn3D[$n1][0][0] & ']' & @CRLF) For $n2 = 1 To UBound($aReturn3D, 2) - 1 If $aReturn3D[$n1][$n2][0] & $aReturn3D[$n1][$n2][1] = "" Then ContinueLoop $sArray &= '$aArray[' & $prefixForEnum & "_" & $aReturn3D[$n1][$n2][0] & '][1] = "' & $prefixForArray & "_" & $aReturn3D[$n1][$n2][0] & '"' & @CRLF $sArray &= '$aArray[' & $prefixForEnum & "_" & $aReturn3D[$n1][$n2][0] & '][2] = "' & $prefixForArray & '"' & @CRLF $sArray &= '$aArray[' & $prefixForEnum & "_" & $aReturn3D[$n1][$n2][0] & '][3] = "' & $aReturn3D[$n1][$n2][0] & '"' & @CRLF $sEnum &= $prefixForEnum & "_" & $aReturn3D[$n1][$n2][0] & ', _' & @CRLF ;~ ConsoleWrite('- >' & $aReturn3D[$n1][$n2][0] & ' = ') ;~ ConsoleWrite($aReturn3D[$n1][$n2][1] & @CRLF) ;~ For $n3 = 0 To UBound($aReturn3D, 3) - 1 ;~ ConsoleWrite($n1 & @TAB & $n2 & @TAB & $n3 & @TAB & $aReturn3D[$n1][$n2][$n3] & @CRLF) ;~ Next Next Next $sEnum &= '$eIniUBound' ConsoleWrite( @CRLF & @CRLF & @CRLF & "Global Enum " & $sEnum & @CRLF & @CRLF & 'Global $aArray = IniArrayInit()' & @CRLF) ; then we use these in the real func ConsoleWrite('Func IniArrayInit()' & @CRLF & 'Local $aArray[$eIniUBound][4]' & @CRLF & $sArray & 'Return $aArray' & @CRLF & 'EndFunc' & @CRLF & @CRLF) ; then we use these in the real func Return $aReturn3D EndFunc ;==>ini2code4build this writes the code that is below Global $hTimer = TimerInit() Global Enum $ezWebServer_Title_Name, _ $ezWebServer_Icon_Path, _ $ezWebServer_Icon_Link, _ $ezWebServer_Icon_TIP, _ $ezWebServer_Font_Name, _ $ezWebServer_Font_Size, _ $ezWebServer_Font_Weight, _ $ezWebServer_Background_Image, _ $ezWebServer_Background_Color, _ $ezWebServer_AutoStartup, _ $ezWebServer_Minimize2Tray, _ $ezWebServer_OnStartMinimize2Tray, _ $ezWebServer_Total_Item, _ $ezWebServer_Item_1_SectionNAME, _ $ezWebServer_Item_2_SectionNAME, _ $ezWebServer_Item_3_SectionNAME, _ $ezWebServer_Item_4_SectionNAME, _ $ezWebServer_Item_5_SectionNAME, _ $ezWebServer_Item_6_SectionNAME, _ $eApache_IconPath, _ $eApache_DisplayName, _ $eApache_ExplorerPath, _ $eApache_ExePath, _ $eApache_ExeParameters, _ $eApache_ExeExitPath, _ $eApache_ExitParameters, _ $eApache_ExeExitPath_Ex, _ $eApache_ExitParameters_Ex, _ $eApache_PID, _ $eApache_ConfigFile, _ $eApache_LogsFile, _ $eApache_AutoStartup, _ $eApache_ConfigsFile, _ $eApache_ButtonCustom_EX1_Enable, _ $eApache_ButtonCustom_EX1_Name, _ $eApache_ButtonCustom_EX1_ExePath, _ $eApache_ButtonCustom_EX1_ExeParameters, _ $eApache_ButtonCustom_EX2_Enable, _ $eApache_ButtonCustom_EX2_Name, _ $eApache_ButtonCustom_EX2_ExePath, _ $eApache_ButtonCustom_EX2_ExeParameters, _ $eMySQL_IconPath, _ $eMySQL_DisplayName, _ $eMySQL_ExplorerPath, _ $eMySQL_ExePath, _ $eMySQL_ExeParameters, _ $eMySQL_ExeExitPath, _ $eMySQL_ExitParameters, _ $eMySQL_ExeExitPath_Ex, _ $eMySQL_ExitParameters_Ex, _ $eMySQL_PID, _ $eMySQL_ConfigFile, _ $eMySQL_LogsFile, _ $eMySQL_AutoStartup, _ $eMySQL_ConfigsFile, _ $eMySQL_ButtonCustom_EX1_Enable, _ $eMySQL_ButtonCustom_EX1_Name, _ $eMySQL_ButtonCustom_EX1_ExePath, _ $eMySQL_ButtonCustom_EX1_ExeParameters, _ $eMySQL_ButtonCustom_EX2_Enable, _ $eMySQL_ButtonCustom_EX2_Name, _ $eMySQL_ButtonCustom_EX2_ExePath, _ $eMySQL_ButtonCustom_EX2_ExeParameters, _ $eFzFTP_IconPath, _ $eFzFTP_DisplayName, _ $eFzFTP_ExplorerPath, _ $eFzFTP_ExePath, _ $eFzFTP_ExeParameters, _ $eFzFTP_ExeExitPath, _ $eFzFTP_ExitParameters, _ $eFzFTP_ExeExitPath_Ex, _ $eFzFTP_ExitParameters_Ex, _ $eFzFTP_PID, _ $eFzFTP_ConfigFile, _ $eFzFTP_LogsFile, _ $eFzFTP_AutoStartup, _ $eFzFTP_ConfigsFile, _ $eFzFTP_ButtonCustom_EX1_Enable, _ $eFzFTP_ButtonCustom_EX1_Name, _ $eFzFTP_ButtonCustom_EX1_ExePath, _ $eFzFTP_ButtonCustom_EX1_ExeParameters, _ $eFzFTP_ButtonCustom_EX2_Enable, _ $eFzFTP_ButtonCustom_EX2_Name, _ $eFzFTP_ButtonCustom_EX2_ExePath, _ $eFzFTP_ButtonCustom_EX2_ExeParameters, _ $eNGINX_IconPath, _ $eNGINX_DisplayName, _ $eNGINX_ExplorerPath, _ $eNGINX_ExePath, _ $eNGINX_ExeParameters, _ $eNGINX_ExeExitPath, _ $eNGINX_ExitParameters, _ $eNGINX_ExeExitPath_Ex, _ $eNGINX_ExitParameters_Ex, _ $eNGINX_PID, _ $eNGINX_ConfigFile, _ $eNGINX_LogsFile, _ $eNGINX_AutoStartup, _ $eNGINX_ConfigsFile, _ $eNGINX_ButtonCustom_EX1_Enable, _ $eNGINX_ButtonCustom_EX1_Name, _ $eNGINX_ButtonCustom_EX1_ExePath, _ $eNGINX_ButtonCustom_EX1_ExeParameters, _ $eNGINX_ButtonCustom_EX2_Enable, _ $eNGINX_ButtonCustom_EX2_Name, _ $eNGINX_ButtonCustom_EX2_ExePath, _ $eNGINX_ButtonCustom_EX2_ExeParameters, _ $eMemCached_IconPath, _ $eMemCached_DisplayName, _ $eMemCached_ExplorerPath, _ $eMemCached_ExePath, _ $eMemCached_ExeParameters, _ $eMemCached_ExeExitPath, _ $eMemCached_ExitParameters, _ $eMemCached_ExeExitPath_Ex, _ $eMemCached_ExitParameters_Ex, _ $eMemCached_PID, _ $eMemCached_ConfigFile, _ $eMemCached_LogsFile, _ $eMemCached_AutoStartup, _ $eMemCached_ConfigsFile, _ $eMemCached_ButtonCustom_EX1_Enable, _ $eMemCached_ButtonCustom_EX1_Name, _ $eMemCached_ButtonCustom_EX1_ExePath, _ $eMemCached_ButtonCustom_EX1_ExeParameters, _ $eMemCached_ButtonCustom_EX2_Enable, _ $eMemCached_ButtonCustom_EX2_Name, _ $eMemCached_ButtonCustom_EX2_ExePath, _ $eMemCached_ButtonCustom_EX2_ExeParameters, _ $ePHPCGI_IconPath, _ $ePHPCGI_DisplayName, _ $ePHPCGI_ExplorerPath, _ $ePHPCGI_ExePath, _ $ePHPCGI_ExeParameters, _ $ePHPCGI_ExeExitPath, _ $ePHPCGI_ExitParameters, _ $ePHPCGI_ExeExitPath_Ex, _ $ePHPCGI_ExitParameters_Ex, _ $ePHPCGI_PID, _ $ePHPCGI_ConfigFile, _ $ePHPCGI_LogsFile, _ $ePHPCGI_AutoStartup, _ $ePHPCGI_ConfigsFile, _ $ePHPCGI_ButtonCustom_EX1_Enable, _ $ePHPCGI_ButtonCustom_EX1_Name, _ $ePHPCGI_ButtonCustom_EX1_ExePath, _ $ePHPCGI_ButtonCustom_EX1_ExeParameters, _ $ePHPCGI_ButtonCustom_EX2_Enable, _ $ePHPCGI_ButtonCustom_EX2_Name, _ $ePHPCGI_ButtonCustom_EX2_ExePath, _ $ePHPCGI_ButtonCustom_EX2_ExeParameters, _ $eIniUBound Global $aArray = IniArrayInit() ConsoleWrite(TimerDiff($hTimer) & @CRLF) $hTimer = TimerInit() ConsoleWrite('--- >' & $aArray[$ezWebServer_Title_Name][0] & @CRLF) ConsoleWrite(TimerDiff($hTimer) & @CRLF) $hTimer = TimerInit() ConsoleWrite('--- >' & $aArray[$eApache_ButtonCustom_EX2_Name][0] & @CRLF) ConsoleWrite(TimerDiff($hTimer) & @CRLF) Func IniArrayInit() Local $aArray[$eIniUBound][4] $aArray[$ezWebServer_Title_Name][1] = "zWebServer_Title_Name" $aArray[$ezWebServer_Title_Name][2] = "zWebServer" $aArray[$ezWebServer_Title_Name][3] = "Title_Name" $aArray[$ezWebServer_Icon_Path][1] = "zWebServer_Icon_Path" $aArray[$ezWebServer_Icon_Path][2] = "zWebServer" $aArray[$ezWebServer_Icon_Path][3] = "Icon_Path" $aArray[$ezWebServer_Icon_Link][1] = "zWebServer_Icon_Link" $aArray[$ezWebServer_Icon_Link][2] = "zWebServer" $aArray[$ezWebServer_Icon_Link][3] = "Icon_Link" $aArray[$ezWebServer_Icon_TIP][1] = "zWebServer_Icon_TIP" $aArray[$ezWebServer_Icon_TIP][2] = "zWebServer" $aArray[$ezWebServer_Icon_TIP][3] = "Icon_TIP" $aArray[$ezWebServer_Font_Name][1] = "zWebServer_Font_Name" $aArray[$ezWebServer_Font_Name][2] = "zWebServer" $aArray[$ezWebServer_Font_Name][3] = "Font_Name" $aArray[$ezWebServer_Font_Size][1] = "zWebServer_Font_Size" $aArray[$ezWebServer_Font_Size][2] = "zWebServer" $aArray[$ezWebServer_Font_Size][3] = "Font_Size" $aArray[$ezWebServer_Font_Weight][1] = "zWebServer_Font_Weight" $aArray[$ezWebServer_Font_Weight][2] = "zWebServer" $aArray[$ezWebServer_Font_Weight][3] = "Font_Weight" $aArray[$ezWebServer_Background_Image][1] = "zWebServer_Background_Image" $aArray[$ezWebServer_Background_Image][2] = "zWebServer" $aArray[$ezWebServer_Background_Image][3] = "Background_Image" $aArray[$ezWebServer_Background_Color][1] = "zWebServer_Background_Color" $aArray[$ezWebServer_Background_Color][2] = "zWebServer" $aArray[$ezWebServer_Background_Color][3] = "Background_Color" $aArray[$ezWebServer_AutoStartup][1] = "zWebServer_AutoStartup" $aArray[$ezWebServer_AutoStartup][2] = "zWebServer" $aArray[$ezWebServer_AutoStartup][3] = "AutoStartup" $aArray[$ezWebServer_Minimize2Tray][1] = "zWebServer_Minimize2Tray" $aArray[$ezWebServer_Minimize2Tray][2] = "zWebServer" $aArray[$ezWebServer_Minimize2Tray][3] = "Minimize2Tray" $aArray[$ezWebServer_OnStartMinimize2Tray][1] = "zWebServer_OnStartMinimize2Tray" $aArray[$ezWebServer_OnStartMinimize2Tray][2] = "zWebServer" $aArray[$ezWebServer_OnStartMinimize2Tray][3] = "OnStartMinimize2Tray" $aArray[$ezWebServer_Total_Item][1] = "zWebServer_Total_Item" $aArray[$ezWebServer_Total_Item][2] = "zWebServer" $aArray[$ezWebServer_Total_Item][3] = "Total_Item" $aArray[$ezWebServer_Item_1_SectionNAME][1] = "zWebServer_Item_1_SectionNAME" $aArray[$ezWebServer_Item_1_SectionNAME][2] = "zWebServer" $aArray[$ezWebServer_Item_1_SectionNAME][3] = "Item_1_SectionNAME" $aArray[$ezWebServer_Item_2_SectionNAME][1] = "zWebServer_Item_2_SectionNAME" $aArray[$ezWebServer_Item_2_SectionNAME][2] = "zWebServer" $aArray[$ezWebServer_Item_2_SectionNAME][3] = "Item_2_SectionNAME" $aArray[$ezWebServer_Item_3_SectionNAME][1] = "zWebServer_Item_3_SectionNAME" $aArray[$ezWebServer_Item_3_SectionNAME][2] = "zWebServer" $aArray[$ezWebServer_Item_3_SectionNAME][3] = "Item_3_SectionNAME" $aArray[$ezWebServer_Item_4_SectionNAME][1] = "zWebServer_Item_4_SectionNAME" $aArray[$ezWebServer_Item_4_SectionNAME][2] = "zWebServer" $aArray[$ezWebServer_Item_4_SectionNAME][3] = "Item_4_SectionNAME" $aArray[$ezWebServer_Item_5_SectionNAME][1] = "zWebServer_Item_5_SectionNAME" $aArray[$ezWebServer_Item_5_SectionNAME][2] = "zWebServer" $aArray[$ezWebServer_Item_5_SectionNAME][3] = "Item_5_SectionNAME" $aArray[$ezWebServer_Item_6_SectionNAME][1] = "zWebServer_Item_6_SectionNAME" $aArray[$ezWebServer_Item_6_SectionNAME][2] = "zWebServer" $aArray[$ezWebServer_Item_6_SectionNAME][3] = "Item_6_SectionNAME" $aArray[$eApache_IconPath][1] = "Apache_IconPath" $aArray[$eApache_IconPath][2] = "Apache" $aArray[$eApache_IconPath][3] = "IconPath" $aArray[$eApache_DisplayName][1] = "Apache_DisplayName" $aArray[$eApache_DisplayName][2] = "Apache" $aArray[$eApache_DisplayName][3] = "DisplayName" $aArray[$eApache_ExplorerPath][1] = "Apache_ExplorerPath" $aArray[$eApache_ExplorerPath][2] = "Apache" $aArray[$eApache_ExplorerPath][3] = "ExplorerPath" $aArray[$eApache_ExePath][1] = "Apache_ExePath" $aArray[$eApache_ExePath][2] = "Apache" $aArray[$eApache_ExePath][3] = "ExePath" $aArray[$eApache_ExeParameters][1] = "Apache_ExeParameters" $aArray[$eApache_ExeParameters][2] = "Apache" $aArray[$eApache_ExeParameters][3] = "ExeParameters" $aArray[$eApache_ExeExitPath][1] = "Apache_ExeExitPath" $aArray[$eApache_ExeExitPath][2] = "Apache" $aArray[$eApache_ExeExitPath][3] = "ExeExitPath" $aArray[$eApache_ExitParameters][1] = "Apache_ExitParameters" $aArray[$eApache_ExitParameters][2] = "Apache" $aArray[$eApache_ExitParameters][3] = "ExitParameters" $aArray[$eApache_ExeExitPath_Ex][1] = "Apache_ExeExitPath_Ex" $aArray[$eApache_ExeExitPath_Ex][2] = "Apache" $aArray[$eApache_ExeExitPath_Ex][3] = "ExeExitPath_Ex" $aArray[$eApache_ExitParameters_Ex][1] = "Apache_ExitParameters_Ex" $aArray[$eApache_ExitParameters_Ex][2] = "Apache" $aArray[$eApache_ExitParameters_Ex][3] = "ExitParameters_Ex" $aArray[$eApache_PID][1] = "Apache_PID" $aArray[$eApache_PID][2] = "Apache" $aArray[$eApache_PID][3] = "PID" $aArray[$eApache_ConfigFile][1] = "Apache_ConfigFile" $aArray[$eApache_ConfigFile][2] = "Apache" $aArray[$eApache_ConfigFile][3] = "ConfigFile" $aArray[$eApache_LogsFile][1] = "Apache_LogsFile" $aArray[$eApache_LogsFile][2] = "Apache" $aArray[$eApache_LogsFile][3] = "LogsFile" $aArray[$eApache_AutoStartup][1] = "Apache_AutoStartup" $aArray[$eApache_AutoStartup][2] = "Apache" $aArray[$eApache_AutoStartup][3] = "AutoStartup" $aArray[$eApache_ConfigsFile][1] = "Apache_ConfigsFile" $aArray[$eApache_ConfigsFile][2] = "Apache" $aArray[$eApache_ConfigsFile][3] = "ConfigsFile" $aArray[$eApache_ButtonCustom_EX1_Enable][1] = "Apache_ButtonCustom_EX1_Enable" $aArray[$eApache_ButtonCustom_EX1_Enable][2] = "Apache" $aArray[$eApache_ButtonCustom_EX1_Enable][3] = "ButtonCustom_EX1_Enable" $aArray[$eApache_ButtonCustom_EX1_Name][1] = "Apache_ButtonCustom_EX1_Name" $aArray[$eApache_ButtonCustom_EX1_Name][2] = "Apache" $aArray[$eApache_ButtonCustom_EX1_Name][3] = "ButtonCustom_EX1_Name" $aArray[$eApache_ButtonCustom_EX1_ExePath][1] = "Apache_ButtonCustom_EX1_ExePath" $aArray[$eApache_ButtonCustom_EX1_ExePath][2] = "Apache" $aArray[$eApache_ButtonCustom_EX1_ExePath][3] = "ButtonCustom_EX1_ExePath" $aArray[$eApache_ButtonCustom_EX1_ExeParameters][1] = "Apache_ButtonCustom_EX1_ExeParameters" $aArray[$eApache_ButtonCustom_EX1_ExeParameters][2] = "Apache" $aArray[$eApache_ButtonCustom_EX1_ExeParameters][3] = "ButtonCustom_EX1_ExeParameters" $aArray[$eApache_ButtonCustom_EX2_Enable][1] = "Apache_ButtonCustom_EX2_Enable" $aArray[$eApache_ButtonCustom_EX2_Enable][2] = "Apache" $aArray[$eApache_ButtonCustom_EX2_Enable][3] = "ButtonCustom_EX2_Enable" $aArray[$eApache_ButtonCustom_EX2_Name][1] = "Apache_ButtonCustom_EX2_Name" $aArray[$eApache_ButtonCustom_EX2_Name][2] = "Apache" $aArray[$eApache_ButtonCustom_EX2_Name][3] = "ButtonCustom_EX2_Name" $aArray[$eApache_ButtonCustom_EX2_ExePath][1] = "Apache_ButtonCustom_EX2_ExePath" $aArray[$eApache_ButtonCustom_EX2_ExePath][2] = "Apache" $aArray[$eApache_ButtonCustom_EX2_ExePath][3] = "ButtonCustom_EX2_ExePath" $aArray[$eApache_ButtonCustom_EX2_ExeParameters][1] = "Apache_ButtonCustom_EX2_ExeParameters" $aArray[$eApache_ButtonCustom_EX2_ExeParameters][2] = "Apache" $aArray[$eApache_ButtonCustom_EX2_ExeParameters][3] = "ButtonCustom_EX2_ExeParameters" $aArray[$eMySQL_IconPath][1] = "MySQL_IconPath" $aArray[$eMySQL_IconPath][2] = "MySQL" $aArray[$eMySQL_IconPath][3] = "IconPath" $aArray[$eMySQL_DisplayName][1] = "MySQL_DisplayName" $aArray[$eMySQL_DisplayName][2] = "MySQL" $aArray[$eMySQL_DisplayName][3] = "DisplayName" $aArray[$eMySQL_ExplorerPath][1] = "MySQL_ExplorerPath" $aArray[$eMySQL_ExplorerPath][2] = "MySQL" $aArray[$eMySQL_ExplorerPath][3] = "ExplorerPath" $aArray[$eMySQL_ExePath][1] = "MySQL_ExePath" $aArray[$eMySQL_ExePath][2] = "MySQL" $aArray[$eMySQL_ExePath][3] = "ExePath" $aArray[$eMySQL_ExeParameters][1] = "MySQL_ExeParameters" $aArray[$eMySQL_ExeParameters][2] = "MySQL" $aArray[$eMySQL_ExeParameters][3] = "ExeParameters" $aArray[$eMySQL_ExeExitPath][1] = "MySQL_ExeExitPath" $aArray[$eMySQL_ExeExitPath][2] = "MySQL" $aArray[$eMySQL_ExeExitPath][3] = "ExeExitPath" $aArray[$eMySQL_ExitParameters][1] = "MySQL_ExitParameters" $aArray[$eMySQL_ExitParameters][2] = "MySQL" $aArray[$eMySQL_ExitParameters][3] = "ExitParameters" $aArray[$eMySQL_ExeExitPath_Ex][1] = "MySQL_ExeExitPath_Ex" $aArray[$eMySQL_ExeExitPath_Ex][2] = "MySQL" $aArray[$eMySQL_ExeExitPath_Ex][3] = "ExeExitPath_Ex" $aArray[$eMySQL_ExitParameters_Ex][1] = "MySQL_ExitParameters_Ex" $aArray[$eMySQL_ExitParameters_Ex][2] = "MySQL" $aArray[$eMySQL_ExitParameters_Ex][3] = "ExitParameters_Ex" $aArray[$eMySQL_PID][1] = "MySQL_PID" $aArray[$eMySQL_PID][2] = "MySQL" $aArray[$eMySQL_PID][3] = "PID" $aArray[$eMySQL_ConfigFile][1] = "MySQL_ConfigFile" $aArray[$eMySQL_ConfigFile][2] = "MySQL" $aArray[$eMySQL_ConfigFile][3] = "ConfigFile" $aArray[$eMySQL_LogsFile][1] = "MySQL_LogsFile" $aArray[$eMySQL_LogsFile][2] = "MySQL" $aArray[$eMySQL_LogsFile][3] = "LogsFile" $aArray[$eMySQL_AutoStartup][1] = "MySQL_AutoStartup" $aArray[$eMySQL_AutoStartup][2] = "MySQL" $aArray[$eMySQL_AutoStartup][3] = "AutoStartup" $aArray[$eMySQL_ConfigsFile][1] = "MySQL_ConfigsFile" $aArray[$eMySQL_ConfigsFile][2] = "MySQL" $aArray[$eMySQL_ConfigsFile][3] = "ConfigsFile" $aArray[$eMySQL_ButtonCustom_EX1_Enable][1] = "MySQL_ButtonCustom_EX1_Enable" $aArray[$eMySQL_ButtonCustom_EX1_Enable][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX1_Enable][3] = "ButtonCustom_EX1_Enable" $aArray[$eMySQL_ButtonCustom_EX1_Name][1] = "MySQL_ButtonCustom_EX1_Name" $aArray[$eMySQL_ButtonCustom_EX1_Name][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX1_Name][3] = "ButtonCustom_EX1_Name" $aArray[$eMySQL_ButtonCustom_EX1_ExePath][1] = "MySQL_ButtonCustom_EX1_ExePath" $aArray[$eMySQL_ButtonCustom_EX1_ExePath][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX1_ExePath][3] = "ButtonCustom_EX1_ExePath" $aArray[$eMySQL_ButtonCustom_EX1_ExeParameters][1] = "MySQL_ButtonCustom_EX1_ExeParameters" $aArray[$eMySQL_ButtonCustom_EX1_ExeParameters][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX1_ExeParameters][3] = "ButtonCustom_EX1_ExeParameters" $aArray[$eMySQL_ButtonCustom_EX2_Enable][1] = "MySQL_ButtonCustom_EX2_Enable" $aArray[$eMySQL_ButtonCustom_EX2_Enable][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX2_Enable][3] = "ButtonCustom_EX2_Enable" $aArray[$eMySQL_ButtonCustom_EX2_Name][1] = "MySQL_ButtonCustom_EX2_Name" $aArray[$eMySQL_ButtonCustom_EX2_Name][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX2_Name][3] = "ButtonCustom_EX2_Name" $aArray[$eMySQL_ButtonCustom_EX2_ExePath][1] = "MySQL_ButtonCustom_EX2_ExePath" $aArray[$eMySQL_ButtonCustom_EX2_ExePath][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX2_ExePath][3] = "ButtonCustom_EX2_ExePath" $aArray[$eMySQL_ButtonCustom_EX2_ExeParameters][1] = "MySQL_ButtonCustom_EX2_ExeParameters" $aArray[$eMySQL_ButtonCustom_EX2_ExeParameters][2] = "MySQL" $aArray[$eMySQL_ButtonCustom_EX2_ExeParameters][3] = "ButtonCustom_EX2_ExeParameters" $aArray[$eFzFTP_IconPath][1] = "FzFTP_IconPath" $aArray[$eFzFTP_IconPath][2] = "FzFTP" $aArray[$eFzFTP_IconPath][3] = "IconPath" $aArray[$eFzFTP_DisplayName][1] = "FzFTP_DisplayName" $aArray[$eFzFTP_DisplayName][2] = "FzFTP" $aArray[$eFzFTP_DisplayName][3] = "DisplayName" $aArray[$eFzFTP_ExplorerPath][1] = "FzFTP_ExplorerPath" $aArray[$eFzFTP_ExplorerPath][2] = "FzFTP" $aArray[$eFzFTP_ExplorerPath][3] = "ExplorerPath" $aArray[$eFzFTP_ExePath][1] = "FzFTP_ExePath" $aArray[$eFzFTP_ExePath][2] = "FzFTP" $aArray[$eFzFTP_ExePath][3] = "ExePath" $aArray[$eFzFTP_ExeParameters][1] = "FzFTP_ExeParameters" $aArray[$eFzFTP_ExeParameters][2] = "FzFTP" $aArray[$eFzFTP_ExeParameters][3] = "ExeParameters" $aArray[$eFzFTP_ExeExitPath][1] = "FzFTP_ExeExitPath" $aArray[$eFzFTP_ExeExitPath][2] = "FzFTP" $aArray[$eFzFTP_ExeExitPath][3] = "ExeExitPath" $aArray[$eFzFTP_ExitParameters][1] = "FzFTP_ExitParameters" $aArray[$eFzFTP_ExitParameters][2] = "FzFTP" $aArray[$eFzFTP_ExitParameters][3] = "ExitParameters" $aArray[$eFzFTP_ExeExitPath_Ex][1] = "FzFTP_ExeExitPath_Ex" $aArray[$eFzFTP_ExeExitPath_Ex][2] = "FzFTP" $aArray[$eFzFTP_ExeExitPath_Ex][3] = "ExeExitPath_Ex" $aArray[$eFzFTP_ExitParameters_Ex][1] = "FzFTP_ExitParameters_Ex" $aArray[$eFzFTP_ExitParameters_Ex][2] = "FzFTP" $aArray[$eFzFTP_ExitParameters_Ex][3] = "ExitParameters_Ex" $aArray[$eFzFTP_PID][1] = "FzFTP_PID" $aArray[$eFzFTP_PID][2] = "FzFTP" $aArray[$eFzFTP_PID][3] = "PID" $aArray[$eFzFTP_ConfigFile][1] = "FzFTP_ConfigFile" $aArray[$eFzFTP_ConfigFile][2] = "FzFTP" $aArray[$eFzFTP_ConfigFile][3] = "ConfigFile" $aArray[$eFzFTP_LogsFile][1] = "FzFTP_LogsFile" $aArray[$eFzFTP_LogsFile][2] = "FzFTP" $aArray[$eFzFTP_LogsFile][3] = "LogsFile" $aArray[$eFzFTP_AutoStartup][1] = "FzFTP_AutoStartup" $aArray[$eFzFTP_AutoStartup][2] = "FzFTP" $aArray[$eFzFTP_AutoStartup][3] = "AutoStartup" $aArray[$eFzFTP_ConfigsFile][1] = "FzFTP_ConfigsFile" $aArray[$eFzFTP_ConfigsFile][2] = "FzFTP" $aArray[$eFzFTP_ConfigsFile][3] = "ConfigsFile" $aArray[$eFzFTP_ButtonCustom_EX1_Enable][1] = "FzFTP_ButtonCustom_EX1_Enable" $aArray[$eFzFTP_ButtonCustom_EX1_Enable][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX1_Enable][3] = "ButtonCustom_EX1_Enable" $aArray[$eFzFTP_ButtonCustom_EX1_Name][1] = "FzFTP_ButtonCustom_EX1_Name" $aArray[$eFzFTP_ButtonCustom_EX1_Name][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX1_Name][3] = "ButtonCustom_EX1_Name" $aArray[$eFzFTP_ButtonCustom_EX1_ExePath][1] = "FzFTP_ButtonCustom_EX1_ExePath" $aArray[$eFzFTP_ButtonCustom_EX1_ExePath][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX1_ExePath][3] = "ButtonCustom_EX1_ExePath" $aArray[$eFzFTP_ButtonCustom_EX1_ExeParameters][1] = "FzFTP_ButtonCustom_EX1_ExeParameters" $aArray[$eFzFTP_ButtonCustom_EX1_ExeParameters][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX1_ExeParameters][3] = "ButtonCustom_EX1_ExeParameters" $aArray[$eFzFTP_ButtonCustom_EX2_Enable][1] = "FzFTP_ButtonCustom_EX2_Enable" $aArray[$eFzFTP_ButtonCustom_EX2_Enable][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX2_Enable][3] = "ButtonCustom_EX2_Enable" $aArray[$eFzFTP_ButtonCustom_EX2_Name][1] = "FzFTP_ButtonCustom_EX2_Name" $aArray[$eFzFTP_ButtonCustom_EX2_Name][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX2_Name][3] = "ButtonCustom_EX2_Name" $aArray[$eFzFTP_ButtonCustom_EX2_ExePath][1] = "FzFTP_ButtonCustom_EX2_ExePath" $aArray[$eFzFTP_ButtonCustom_EX2_ExePath][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX2_ExePath][3] = "ButtonCustom_EX2_ExePath" $aArray[$eFzFTP_ButtonCustom_EX2_ExeParameters][1] = "FzFTP_ButtonCustom_EX2_ExeParameters" $aArray[$eFzFTP_ButtonCustom_EX2_ExeParameters][2] = "FzFTP" $aArray[$eFzFTP_ButtonCustom_EX2_ExeParameters][3] = "ButtonCustom_EX2_ExeParameters" $aArray[$eNGINX_IconPath][1] = "NGINX_IconPath" $aArray[$eNGINX_IconPath][2] = "NGINX" $aArray[$eNGINX_IconPath][3] = "IconPath" $aArray[$eNGINX_DisplayName][1] = "NGINX_DisplayName" $aArray[$eNGINX_DisplayName][2] = "NGINX" $aArray[$eNGINX_DisplayName][3] = "DisplayName" $aArray[$eNGINX_ExplorerPath][1] = "NGINX_ExplorerPath" $aArray[$eNGINX_ExplorerPath][2] = "NGINX" $aArray[$eNGINX_ExplorerPath][3] = "ExplorerPath" $aArray[$eNGINX_ExePath][1] = "NGINX_ExePath" $aArray[$eNGINX_ExePath][2] = "NGINX" $aArray[$eNGINX_ExePath][3] = "ExePath" $aArray[$eNGINX_ExeParameters][1] = "NGINX_ExeParameters" $aArray[$eNGINX_ExeParameters][2] = "NGINX" $aArray[$eNGINX_ExeParameters][3] = "ExeParameters" $aArray[$eNGINX_ExeExitPath][1] = "NGINX_ExeExitPath" $aArray[$eNGINX_ExeExitPath][2] = "NGINX" $aArray[$eNGINX_ExeExitPath][3] = "ExeExitPath" $aArray[$eNGINX_ExitParameters][1] = "NGINX_ExitParameters" $aArray[$eNGINX_ExitParameters][2] = "NGINX" $aArray[$eNGINX_ExitParameters][3] = "ExitParameters" $aArray[$eNGINX_ExeExitPath_Ex][1] = "NGINX_ExeExitPath_Ex" $aArray[$eNGINX_ExeExitPath_Ex][2] = "NGINX" $aArray[$eNGINX_ExeExitPath_Ex][3] = "ExeExitPath_Ex" $aArray[$eNGINX_ExitParameters_Ex][1] = "NGINX_ExitParameters_Ex" $aArray[$eNGINX_ExitParameters_Ex][2] = "NGINX" $aArray[$eNGINX_ExitParameters_Ex][3] = "ExitParameters_Ex" $aArray[$eNGINX_PID][1] = "NGINX_PID" $aArray[$eNGINX_PID][2] = "NGINX" $aArray[$eNGINX_PID][3] = "PID" $aArray[$eNGINX_ConfigFile][1] = "NGINX_ConfigFile" $aArray[$eNGINX_ConfigFile][2] = "NGINX" $aArray[$eNGINX_ConfigFile][3] = "ConfigFile" $aArray[$eNGINX_LogsFile][1] = "NGINX_LogsFile" $aArray[$eNGINX_LogsFile][2] = "NGINX" $aArray[$eNGINX_LogsFile][3] = "LogsFile" $aArray[$eNGINX_AutoStartup][1] = "NGINX_AutoStartup" $aArray[$eNGINX_AutoStartup][2] = "NGINX" $aArray[$eNGINX_AutoStartup][3] = "AutoStartup" $aArray[$eNGINX_ConfigsFile][1] = "NGINX_ConfigsFile" $aArray[$eNGINX_ConfigsFile][2] = "NGINX" $aArray[$eNGINX_ConfigsFile][3] = "ConfigsFile" $aArray[$eNGINX_ButtonCustom_EX1_Enable][1] = "NGINX_ButtonCustom_EX1_Enable" $aArray[$eNGINX_ButtonCustom_EX1_Enable][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX1_Enable][3] = "ButtonCustom_EX1_Enable" $aArray[$eNGINX_ButtonCustom_EX1_Name][1] = "NGINX_ButtonCustom_EX1_Name" $aArray[$eNGINX_ButtonCustom_EX1_Name][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX1_Name][3] = "ButtonCustom_EX1_Name" $aArray[$eNGINX_ButtonCustom_EX1_ExePath][1] = "NGINX_ButtonCustom_EX1_ExePath" $aArray[$eNGINX_ButtonCustom_EX1_ExePath][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX1_ExePath][3] = "ButtonCustom_EX1_ExePath" $aArray[$eNGINX_ButtonCustom_EX1_ExeParameters][1] = "NGINX_ButtonCustom_EX1_ExeParameters" $aArray[$eNGINX_ButtonCustom_EX1_ExeParameters][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX1_ExeParameters][3] = "ButtonCustom_EX1_ExeParameters" $aArray[$eNGINX_ButtonCustom_EX2_Enable][1] = "NGINX_ButtonCustom_EX2_Enable" $aArray[$eNGINX_ButtonCustom_EX2_Enable][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX2_Enable][3] = "ButtonCustom_EX2_Enable" $aArray[$eNGINX_ButtonCustom_EX2_Name][1] = "NGINX_ButtonCustom_EX2_Name" $aArray[$eNGINX_ButtonCustom_EX2_Name][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX2_Name][3] = "ButtonCustom_EX2_Name" $aArray[$eNGINX_ButtonCustom_EX2_ExePath][1] = "NGINX_ButtonCustom_EX2_ExePath" $aArray[$eNGINX_ButtonCustom_EX2_ExePath][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX2_ExePath][3] = "ButtonCustom_EX2_ExePath" $aArray[$eNGINX_ButtonCustom_EX2_ExeParameters][1] = "NGINX_ButtonCustom_EX2_ExeParameters" $aArray[$eNGINX_ButtonCustom_EX2_ExeParameters][2] = "NGINX" $aArray[$eNGINX_ButtonCustom_EX2_ExeParameters][3] = "ButtonCustom_EX2_ExeParameters" $aArray[$eMemCached_IconPath][1] = "MemCached_IconPath" $aArray[$eMemCached_IconPath][2] = "MemCached" $aArray[$eMemCached_IconPath][3] = "IconPath" $aArray[$eMemCached_DisplayName][1] = "MemCached_DisplayName" $aArray[$eMemCached_DisplayName][2] = "MemCached" $aArray[$eMemCached_DisplayName][3] = "DisplayName" $aArray[$eMemCached_ExplorerPath][1] = "MemCached_ExplorerPath" $aArray[$eMemCached_ExplorerPath][2] = "MemCached" $aArray[$eMemCached_ExplorerPath][3] = "ExplorerPath" $aArray[$eMemCached_ExePath][1] = "MemCached_ExePath" $aArray[$eMemCached_ExePath][2] = "MemCached" $aArray[$eMemCached_ExePath][3] = "ExePath" $aArray[$eMemCached_ExeParameters][1] = "MemCached_ExeParameters" $aArray[$eMemCached_ExeParameters][2] = "MemCached" $aArray[$eMemCached_ExeParameters][3] = "ExeParameters" $aArray[$eMemCached_ExeExitPath][1] = "MemCached_ExeExitPath" $aArray[$eMemCached_ExeExitPath][2] = "MemCached" $aArray[$eMemCached_ExeExitPath][3] = "ExeExitPath" $aArray[$eMemCached_ExitParameters][1] = "MemCached_ExitParameters" $aArray[$eMemCached_ExitParameters][2] = "MemCached" $aArray[$eMemCached_ExitParameters][3] = "ExitParameters" $aArray[$eMemCached_ExeExitPath_Ex][1] = "MemCached_ExeExitPath_Ex" $aArray[$eMemCached_ExeExitPath_Ex][2] = "MemCached" $aArray[$eMemCached_ExeExitPath_Ex][3] = "ExeExitPath_Ex" $aArray[$eMemCached_ExitParameters_Ex][1] = "MemCached_ExitParameters_Ex" $aArray[$eMemCached_ExitParameters_Ex][2] = "MemCached" $aArray[$eMemCached_ExitParameters_Ex][3] = "ExitParameters_Ex" $aArray[$eMemCached_PID][1] = "MemCached_PID" $aArray[$eMemCached_PID][2] = "MemCached" $aArray[$eMemCached_PID][3] = "PID" $aArray[$eMemCached_ConfigFile][1] = "MemCached_ConfigFile" $aArray[$eMemCached_ConfigFile][2] = "MemCached" $aArray[$eMemCached_ConfigFile][3] = "ConfigFile" $aArray[$eMemCached_LogsFile][1] = "MemCached_LogsFile" $aArray[$eMemCached_LogsFile][2] = "MemCached" $aArray[$eMemCached_LogsFile][3] = "LogsFile" $aArray[$eMemCached_AutoStartup][1] = "MemCached_AutoStartup" $aArray[$eMemCached_AutoStartup][2] = "MemCached" $aArray[$eMemCached_AutoStartup][3] = "AutoStartup" $aArray[$eMemCached_ConfigsFile][1] = "MemCached_ConfigsFile" $aArray[$eMemCached_ConfigsFile][2] = "MemCached" $aArray[$eMemCached_ConfigsFile][3] = "ConfigsFile" $aArray[$eMemCached_ButtonCustom_EX1_Enable][1] = "MemCached_ButtonCustom_EX1_Enable" $aArray[$eMemCached_ButtonCustom_EX1_Enable][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX1_Enable][3] = "ButtonCustom_EX1_Enable" $aArray[$eMemCached_ButtonCustom_EX1_Name][1] = "MemCached_ButtonCustom_EX1_Name" $aArray[$eMemCached_ButtonCustom_EX1_Name][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX1_Name][3] = "ButtonCustom_EX1_Name" $aArray[$eMemCached_ButtonCustom_EX1_ExePath][1] = "MemCached_ButtonCustom_EX1_ExePath" $aArray[$eMemCached_ButtonCustom_EX1_ExePath][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX1_ExePath][3] = "ButtonCustom_EX1_ExePath" $aArray[$eMemCached_ButtonCustom_EX1_ExeParameters][1] = "MemCached_ButtonCustom_EX1_ExeParameters" $aArray[$eMemCached_ButtonCustom_EX1_ExeParameters][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX1_ExeParameters][3] = "ButtonCustom_EX1_ExeParameters" $aArray[$eMemCached_ButtonCustom_EX2_Enable][1] = "MemCached_ButtonCustom_EX2_Enable" $aArray[$eMemCached_ButtonCustom_EX2_Enable][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX2_Enable][3] = "ButtonCustom_EX2_Enable" $aArray[$eMemCached_ButtonCustom_EX2_Name][1] = "MemCached_ButtonCustom_EX2_Name" $aArray[$eMemCached_ButtonCustom_EX2_Name][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX2_Name][3] = "ButtonCustom_EX2_Name" $aArray[$eMemCached_ButtonCustom_EX2_ExePath][1] = "MemCached_ButtonCustom_EX2_ExePath" $aArray[$eMemCached_ButtonCustom_EX2_ExePath][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX2_ExePath][3] = "ButtonCustom_EX2_ExePath" $aArray[$eMemCached_ButtonCustom_EX2_ExeParameters][1] = "MemCached_ButtonCustom_EX2_ExeParameters" $aArray[$eMemCached_ButtonCustom_EX2_ExeParameters][2] = "MemCached" $aArray[$eMemCached_ButtonCustom_EX2_ExeParameters][3] = "ButtonCustom_EX2_ExeParameters" $aArray[$ePHPCGI_IconPath][1] = "PHPCGI_IconPath" $aArray[$ePHPCGI_IconPath][2] = "PHPCGI" $aArray[$ePHPCGI_IconPath][3] = "IconPath" $aArray[$ePHPCGI_DisplayName][1] = "PHPCGI_DisplayName" $aArray[$ePHPCGI_DisplayName][2] = "PHPCGI" $aArray[$ePHPCGI_DisplayName][3] = "DisplayName" $aArray[$ePHPCGI_ExplorerPath][1] = "PHPCGI_ExplorerPath" $aArray[$ePHPCGI_ExplorerPath][2] = "PHPCGI" $aArray[$ePHPCGI_ExplorerPath][3] = "ExplorerPath" $aArray[$ePHPCGI_ExePath][1] = "PHPCGI_ExePath" $aArray[$ePHPCGI_ExePath][2] = "PHPCGI" $aArray[$ePHPCGI_ExePath][3] = "ExePath" $aArray[$ePHPCGI_ExeParameters][1] = "PHPCGI_ExeParameters" $aArray[$ePHPCGI_ExeParameters][2] = "PHPCGI" $aArray[$ePHPCGI_ExeParameters][3] = "ExeParameters" $aArray[$ePHPCGI_ExeExitPath][1] = "PHPCGI_ExeExitPath" $aArray[$ePHPCGI_ExeExitPath][2] = "PHPCGI" $aArray[$ePHPCGI_ExeExitPath][3] = "ExeExitPath" $aArray[$ePHPCGI_ExitParameters][1] = "PHPCGI_ExitParameters" $aArray[$ePHPCGI_ExitParameters][2] = "PHPCGI" $aArray[$ePHPCGI_ExitParameters][3] = "ExitParameters" $aArray[$ePHPCGI_ExeExitPath_Ex][1] = "PHPCGI_ExeExitPath_Ex" $aArray[$ePHPCGI_ExeExitPath_Ex][2] = "PHPCGI" $aArray[$ePHPCGI_ExeExitPath_Ex][3] = "ExeExitPath_Ex" $aArray[$ePHPCGI_ExitParameters_Ex][1] = "PHPCGI_ExitParameters_Ex" $aArray[$ePHPCGI_ExitParameters_Ex][2] = "PHPCGI" $aArray[$ePHPCGI_ExitParameters_Ex][3] = "ExitParameters_Ex" $aArray[$ePHPCGI_PID][1] = "PHPCGI_PID" $aArray[$ePHPCGI_PID][2] = "PHPCGI" $aArray[$ePHPCGI_PID][3] = "PID" $aArray[$ePHPCGI_ConfigFile][1] = "PHPCGI_ConfigFile" $aArray[$ePHPCGI_ConfigFile][2] = "PHPCGI" $aArray[$ePHPCGI_ConfigFile][3] = "ConfigFile" $aArray[$ePHPCGI_LogsFile][1] = "PHPCGI_LogsFile" $aArray[$ePHPCGI_LogsFile][2] = "PHPCGI" $aArray[$ePHPCGI_LogsFile][3] = "LogsFile" $aArray[$ePHPCGI_AutoStartup][1] = "PHPCGI_AutoStartup" $aArray[$ePHPCGI_AutoStartup][2] = "PHPCGI" $aArray[$ePHPCGI_AutoStartup][3] = "AutoStartup" $aArray[$ePHPCGI_ConfigsFile][1] = "PHPCGI_ConfigsFile" $aArray[$ePHPCGI_ConfigsFile][2] = "PHPCGI" $aArray[$ePHPCGI_ConfigsFile][3] = "ConfigsFile" $aArray[$ePHPCGI_ButtonCustom_EX1_Enable][1] = "PHPCGI_ButtonCustom_EX1_Enable" $aArray[$ePHPCGI_ButtonCustom_EX1_Enable][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX1_Enable][3] = "ButtonCustom_EX1_Enable" $aArray[$ePHPCGI_ButtonCustom_EX1_Name][1] = "PHPCGI_ButtonCustom_EX1_Name" $aArray[$ePHPCGI_ButtonCustom_EX1_Name][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX1_Name][3] = "ButtonCustom_EX1_Name" $aArray[$ePHPCGI_ButtonCustom_EX1_ExePath][1] = "PHPCGI_ButtonCustom_EX1_ExePath" $aArray[$ePHPCGI_ButtonCustom_EX1_ExePath][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX1_ExePath][3] = "ButtonCustom_EX1_ExePath" $aArray[$ePHPCGI_ButtonCustom_EX1_ExeParameters][1] = "PHPCGI_ButtonCustom_EX1_ExeParameters" $aArray[$ePHPCGI_ButtonCustom_EX1_ExeParameters][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX1_ExeParameters][3] = "ButtonCustom_EX1_ExeParameters" $aArray[$ePHPCGI_ButtonCustom_EX2_Enable][1] = "PHPCGI_ButtonCustom_EX2_Enable" $aArray[$ePHPCGI_ButtonCustom_EX2_Enable][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX2_Enable][3] = "ButtonCustom_EX2_Enable" $aArray[$ePHPCGI_ButtonCustom_EX2_Name][1] = "PHPCGI_ButtonCustom_EX2_Name" $aArray[$ePHPCGI_ButtonCustom_EX2_Name][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX2_Name][3] = "ButtonCustom_EX2_Name" $aArray[$ePHPCGI_ButtonCustom_EX2_ExePath][1] = "PHPCGI_ButtonCustom_EX2_ExePath" $aArray[$ePHPCGI_ButtonCustom_EX2_ExePath][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX2_ExePath][3] = "ButtonCustom_EX2_ExePath" $aArray[$ePHPCGI_ButtonCustom_EX2_ExeParameters][1] = "PHPCGI_ButtonCustom_EX2_ExeParameters" $aArray[$ePHPCGI_ButtonCustom_EX2_ExeParameters][2] = "PHPCGI" $aArray[$ePHPCGI_ButtonCustom_EX2_ExeParameters][3] = "ButtonCustom_EX2_ExeParameters" For $iEnum = 0 To $eIniUBound - 1 $aArray[$iEnum][0] = iniGetValue($aArray, $iEnum) Next Return $aArray EndFunc ;==>IniArrayInit Func iniGetValue(ByRef $aArray, $iEnum, $vDefault = '') Return IniRead(@ScriptDir & "\zWebServer.ini", $aArray[$iEnum][2], $aArray[$iEnum][3], $vDefault) EndFunc that as is returns 7.4161 --- >zWebServer Control Panel 0.007 --- >Custom EX2 0.0072 So it takes some 10 ms. to load but once loaded takes no time to get a value. As is basically "Enum" driven is easy to edit the code and to use. Or to load the array for debugging ? I hope this does it as far as optimization and ease of use.1 point -
Or using Map ? #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Version=Beta #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <Constants.au3> Global $mIni[] ReadIni("Test.ini") MsgBox($MB_SYSTEMMODAL, "", $mIni["PHPCGI|IconPath"]) Func ReadIni($sFile) Local $aSection = IniReadSectionNames($sFile) Local $aIni For $i = 1 To $aSection[0] $aIni = IniReadSection($sFile, $aSection[$i]) For $j = 1 to $aIni[0][0] $mIni[$aSection[$i] & "|" & $aIni[$j][0]] = $aIni[$j][1] Next Next EndFunc1 point
-
[HELP] Read ini-file to Array
Trong reacted to argumentum for a topic
#include <Debug.au3> readthisini() Func readthisini() Local $iCols = 0, $ini = @ScriptDir & "\zWebServer.ini" Local $aIniSectionNames = IniReadSectionNames($ini) ;~ _DebugArrayDisplay($aIniSectionNames, "$aIniSectionNames") Local $aTemp, $aArray[$aIniSectionNames[0] + 1][2] For $n = 1 To $aIniSectionNames[0] $aArray[$n][0] = $aIniSectionNames[$n] $aArray[$n][1] = IniReadSection($ini, $aIniSectionNames[$n]) If $iCols < UBound($aArray[$n][1]) Then $iCols = UBound($aArray[$n][1]) Next Local $aReturn3D[$aIniSectionNames[0] + 1][$iCols][2] For $n1 = 1 To $aIniSectionNames[0] $aTemp = $aArray[$n1][1] If Not IsArray($aTemp) Then ContinueLoop $aReturn3D[$n1][0][0] = $aIniSectionNames[$n1] ; this holds the section name For $n2 = 1 To UBound($aTemp) - 1 For $n3 = 0 To UBound($aTemp, 2) - 1 $aReturn3D[$n1][$n2][$n3] = $aTemp[$n2][$n3] Next Next Next ; show what's in the array For $n1 = 1 To UBound($aReturn3D, 1) - 1 ConsoleWrite('+ >[' & $aReturn3D[$n1][0][0] & ']' & @CRLF) For $n2 = 1 To UBound($aReturn3D, 2) - 1 If $aReturn3D[$n1][$n2][0] & $aReturn3D[$n1][$n2][1] = "" Then ContinueLoop ConsoleWrite('- >' & $aReturn3D[$n1][$n2][0] & ' = ') ConsoleWrite($aReturn3D[$n1][$n2][1] & @CRLF) ;~ For $n3 = 0 To UBound($aReturn3D, 3) - 1 ;~ ConsoleWrite($n1 & @TAB & $n2 & @TAB & $n3 & @TAB & $aReturn3D[$n1][$n2][$n3] & @CRLF) ;~ Next Next Next Return $aReturn3D EndFunc ;==>readthisini ...and the 3D version. But if today is one of those days for you, ..take a walk and code tomorrow1 point -
[HELP] Read ini-file to Array
Trong reacted to argumentum for a topic
#include <Debug.au3> readthisini() Func readthisini() Local $ini = @ScriptDir & "\zWebServer.ini" Local $aIniSectionNames = IniReadSectionNames($ini) ;~ _DebugArrayDisplay($aIniSectionNames, "$aIniSectionNames") Local $aTemp, $aArray[$aIniSectionNames[0] + 1][2] For $n = 1 To $aIniSectionNames[0] $aArray[$n][0] = $aIniSectionNames[$n] $aArray[$n][1] = IniReadSection($ini, $aIniSectionNames[$n]) ;~ _DebugArrayDisplay($aArray[$n][1], $aIniSectionNames[$n]) Next _DebugArrayDisplay($aArray, "Return") Return $aArray EndFunc1 point -
Maybe something like: GUICtrlCreatePic(@ScriptDir & "\example.jpg", 0, 0, 500, 500) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlCreateLabel("Example Text", 10, 10, 200, 20) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)1 point
-
therks, Jon managed to get the known Map bugs fixed in the new Beta and no-one has come up with any new problems of note yet. I think you could safely assume that the functionality will be included in the next release - but as always, no promises. M231 point
-
Remap CapsLock to Ctrl possible? So Capslock works exactly like Ctrl.
spudw2k reacted to JockoDundee for a topic
ProcessClose($Bird1, $Bird2, $Stone1)1 point -
1 point
-
Remap CapsLock to Ctrl possible? So Capslock works exactly like Ctrl.
Skysnake reacted to JLogan3o13 for a topic
Or use this as an opportunity to define the process/steps that are causing you to copy and paste so often, and automate them. Kill two birds with one stone, without having to re-engineer your keyboard keys.1 point -
Multi column searchIn this example a ListView Combo control is used to define search filters. The main ListView is a custom drawn and virtual ListView. Searching and sorting is based on array indexes (1d arrays of integers). ListView ComboIn the ListView Combo control in the image, a search is defined for rows that matches search filters in 3 columns: 2 x's in the Strings column, dates in the range 2015 - 2019 in the Dates column, and 2 consecutive 5 digits in the Floats column. Note that the rows in the ListView Combo corresponds to the columns in $g_aArray and in the main ListView. There are 5 columns in the ListView Combo: Col is the column index in $g_aArray/main ListView The Checkbox is used to enable/disable a search filter Column is the column name in the main ListView Ord is the order of the search filter. The order is filled in automatically when a search filter is enabled and a search string is entered. The order is cleared on a disabled search filter or an empty search string. RegEx indicates RegEx or Normal search Click the Checkbox to switch The Search string column contains search strings that are entered through an Edit control. Click to open the Edit control. Move the mouse out of the Edit control to close it. Note the order of the 3 search filters in the image. The Strings column with order 0 is the first and most significant search filter. The Dates column with order 1 is the next search filter. The Floats column with order 2 is the last and least significant search filter. Rule: For search filters provided with an order, you can only change the least significant search filter (with the highest order). If you want to change the order of the Strings and Floats search filters so that Floats gets order 0 and Strings order 2, you must first disable all 3 search filters in this order: Floats, Dates, Strings. Click the Checkbox in first column to disable the search filters. Then you have to enable the 3 search filters again in this order: Floats, Dates, Strings. Performance considerations are the reason for this rule. Because the search is an incremental search, it's expected to be very dynamic and responsive. There must be no delays if you e.g. adds or removes a character in a search string. Therefore, it's important that only the least significant search filter can be changed. If only the least significant search filter can be changed, only one search and one sort must be recalculated. If it was possible to update the search string in the most significant search filter then both the search and the sort would have to be recalculated for all search filters. In this example with 6 columns in $g_aArray and main ListView, 6 search filters are possible. If all 6 search filters had to be recalculated for both the search and the sort, then it would certainly cause a significant delay. Use the Reset button to completely reset all search filters. Main ListViewThe main ListView uses two different WM_NOTIFY message handlers: WM_NOTIFY_All is used to display all rows in $g_aArray when no search filter is applied. WM_NOTIFY_Search is used to display the matching rows in $g_aArray when one or more search filters are applied. LVN_GETDISPINFO code in WM_NOTIFY_All: Case $LVN_GETDISPINFOW Local $tNMLVDISPINFO = DllStructCreate( $tagNMLVDISPINFO, $lParam ) Local Static $tText = DllStructCreate( "wchar Text[50]" ), $pText = DllStructGetPtr( $tText ) $tText.Text = $g_aArray[$g_aIndex[($g_iSortDir=$HDF_SORTUP?$tNMLVDISPINFO.Item:$g_iRows-1-$tNMLVDISPINFO.Item)]][$tNMLVDISPINFO.SubItem] $tNMLVDISPINFO.Text = $pText Return Note usage of the sort index $g_aIndex: $g_aArray[$g_aIndex[($g_iSortDir=$HDF_SORTUP?$tNMLVDISPINFO.Item:$g_iRows-1-$tNMLVDISPINFO.Item)]] LVN_GETDISPINFO code in WM_NOTIFY_Search: Case $LVN_GETDISPINFOW Local $tNMLVDISPINFO = DllStructCreate( $tagNMLVDISPINFO, $lParam ) If Not ( $g_aSearchCols[$tNMLVDISPINFO.SubItem] == "" ) Then Return ; Skip $g_aSearchCols Local Static $tText = DllStructCreate( "wchar Text[50]" ), $pText = DllStructGetPtr( $tText ) $tText.Text = $g_aArray[$g_aSearchRows[$g_aSearchIndex[($g_iSortDir=$HDF_SORTUP?$tNMLVDISPINFO.Item:$g_iSearchRows-1-$tNMLVDISPINFO.Item)]]][$tNMLVDISPINFO.SubItem] $tNMLVDISPINFO.Text = $pText Return Note the If statement that skips columns, which are subsequently drawn with custom draw code. Usage of the search index $g_aSearchRows (see below) and the sort index $g_aSearchIndex (see below): $g_aArray[$g_aSearchRows[$g_aSearchIndex[($g_iSortDir=$HDF_SORTUP?$tNMLVDISPINFO.Item:$g_iSearchRows-1-$tNMLVDISPINFO.Item)]]] The custom draw code in WM_NOTIFY_Search that shows the part of a subitem text that exactly matches the search string on a cyan or yellow background is similar to the custom draw code here. Main LoopThe interesting messages in the main loop regarding multi column search are $g_idComboListViewSubItem0,3,4, $idExtractRowsBySearchFilter and $idListViewSort. $g_idComboListViewSubItem0,3,4 handles changes to a search filter made through the ListView Combo control in columns 0, 3, and 4. Rows that match the search filter are extracted from $g_aArray through a $idExtractRowsBySearchFilter message. Finally, the rows are sorted through a $idListViewSort message. SearchingCode to extract the rows that match a search filter is implemented this way for a RegEx search: For $i = 0 To $iSearchRowsAll - 1 If StringRegExp( $g_aArray[$aSearchRowsAll[$i]][$g_iCLVRow], $sSearch ) Then $g_aSearchRows[$g_iSearchRows] = $aSearchRowsAll[$i] $g_iSearchRows += 1 EndIf Next For the first search filter with order 0 in the image $iSearchRowsAll = $g_iRows. And $aSearchRowsAll = $g_aIndex as calculated for the last column (the current sort column) in the main ListView. $g_iSearchRows is the number of matching rows and $g_aSearchRows is an index of the matching rows. For the last search filter with order 2 in the image $iSearchRowsAll = $g_iSearchRows as calculated for the previous search filter with order 1. And $aSearchRowsAll = $g_aSearchIndex (see below) also as calculated for the previous search filter with order 1. SortingSorting the rows that match a search filter is performed this way: $g_tIndex = FAS_Sort2DArrayAu3( $g_aArray, $aCompare, $g_aSearchRows, $g_iSearchRows ) AccessVariables01( IntStructToArraySearchMtd, $g_aSearchIndex ) $g_aSearchRows and $g_iSearchRows are passed to FAS_Sort2DArrayAu3() as parameters. FAS_Sort2DArrayAu3() returns a sort index as a DllStruct, which is converted to a 1d array of integers in $g_aSearchIndex. $g_aSearchIndex is the sort index for rows extracted through a search filter. FAS_Sort2DArrayIndexFunc() performs the sorting when the two additional parameters are passed to FAS_Sort2DArrayAu3(). This is the first part of FAS_Sort2DArrayIndexFunc() to sort strings: Func FAS_Sort2DArrayIndexFunc( $aArray, $aCompare, $aSearchRows, $iSearchRows ) Local $iRows = $iSearchRows, $tIndex = DllStructCreate( "uint[" & $iRows & "]" ), $pIndex = DllStructGetPtr( $tIndex ) Static $hDll = DllOpen( "kernel32.dll" ) Local $c, $a, $lo, $hi, $mi If $aCompare[0][1] Then ; Sorting by one column of strings $c = $aCompare[0][0] $a = $aCompare[0][2] For $i = 1 To $iRows - 1 $lo = 0 $hi = $i - 1 Do $mi = Int( ( $lo + $hi ) / 2 ) Switch StringCompare( $aArray[$aSearchRows[$i]][$c], $aArray[$aSearchRows[DllStructGetData($tIndex,1,$mi+1)]][$c] ) * $a Case -1 $hi = $mi - 1 Case 1 $lo = $mi + 1 Case 0 ExitLoop EndSwitch Until $lo > $hi DllCall( $hDll, "none", "RtlMoveMemory", "struct*", $pIndex+($mi+1)*4, "struct*", $pIndex+$mi*4, "ulong_ptr", ($i-$mi)*4 ) DllStructSetData( $tIndex, 1, $i, $mi+1+($lo=$mi+1) ) Next The very last code box in the Main ListView section above shows how to extract a row from $g_aArray, taking into account both $g_aSearchRows and $g_aSearchIndex. Miscellaneous That's not correct. Starting with Windows 7, all the different parts that make up a listview item or subitem (checkbox, icon, subicon, label, sublabel, left and top margins) have the same size. Only older Windows versions use other sizes. Only very few Windows styles will change these sizes on Windows 7 and later. Code MultiColumnSearch.7z I'll probably add a few more posts in relation to these examples. Then I'll include all the examples in the 7z-file at bottom of first post.1 point