Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 11/22/2017 in all areas

  1. Belini, This is how I do it: #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> ; Set resize mode for controls Opt("GUIResizeMode", $GUI_DOCKAUTO) Global $iGUIInitSize = 500 $hGUI = GUICreate("Test", $iGUIInitSize, 500, -1, -1, BitOR($WS_SIZEBOX, $WS_SYSMENU)) $cButton = GUICtrlCreateButton("Resizing text", 10, 10, 80, 30) $iLast_Control = GUICtrlCreateDummy() GUISetState() GUIRegisterMsg($WM_SIZE, "_WM_SIZE") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam, $lParam If $hWnd = $hGUI Then ; Calculate required font size Local $aGUI_Size = WinGetClientSize($hGUI) $iFontSize = Int(2 * (.25 + (8 * $aGUI_Size[0] / $iGUIInitSize))) / 2 ; Reset font size for all controls on main GUI For $i = 0 To $iLast_Control GUICtrlSetFont($i, $iFontSize) Next EndIf EndFunc ;==>_WM_SIZE M23
    2 points
  2. Totally agree. An even worse case is Python, for which a few laughably half-hearted compiler attempts have been written that produce total and utter garbage. In my own area of application (scientific computation), even commercial alternatives such as Matlab produce equally inept "compiled" exes that either crash or require several parallel universe lifetimes to complete. Then I'd rather stick with AutoIt's solid, stable stub interpreter (with straightforward syntax, nice GUI and other graphics capabilities up and running in a day, and full Windows functionality under the hood) while farming out the computational hard labour to a dedicated dll. The one feature of stub interpreters that is often overlooked is that it drastically shortens development time, as you can do fast testing cycles in the interpreter, and afterwards, turning the script into an exe is not going throw tons of new errors your way. Try tracing transient memory leaks or similar Heisenbugs in MSVC for comparison... Just out of interest, some parts are still assembly, and even a recent Word patch (ye olde Equation Editor) was done at this level.
    2 points
  3. $oBuffer = ObjCreate('Scripting.Dictionary') $h_File_Source = FileOpen("source.txt") $h_File_Output = FileOpen("output.txt", 2) While 1 $sLine = FileReadLine($h_File_Source) If @error Then ExitLoop ; if in check buffer skip line If $oBuffer.Exists($sLine) Then ContinueLoop ; write line to output file FileWriteLine($h_File_Output, $sLine) ; Add to duplicate check buffer $oBuffer.Item($sLine) = 1 WEnd FileClose($h_File_Source) FileClose($h_File_Output)
    2 points
  4. trancexx

    Run binary

    It's about running exe from memory as it's often called. So you have some binary data that you want to embed in your script and run afterward like some additional program. In this post I will try to explain how to do it. First to deal with mentioned binary as that's, in spite of the plainness of retrieving it, often insuperable. To avoid questions about that this is one way of getting it: Global $sModule = "E:Program filesGUIDGenGUIDGEN.EXE" ; change to yours wanted Global $hModule = FileOpen($sModule, 16) If @error Then Exit Global $bBinary = FileRead($hModule) FileClose($hModule) Global Const $MAX_LINESIZE = 4095 Global $iNewLine, $j Global $iChinkSize = 32 Global $sBinary For $i = 1 To BinaryLen($bBinary) Step $iChinkSize $j += 1 If 4*($j * $iChinkSize) > $MAX_LINESIZE - 129 Then $iNewLine = 1 EndIf If $iNewLine Then $iNewLine = 0 $j = 0 $sBinary = StringTrimRight($sBinary, 5) $sBinary &= @CRLF & '$bBinary &= "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF ContinueLoop EndIf If $i = 1 Then $sBinary &= '$bBinary = "' & BinaryMid($bBinary, $i, $iChinkSize) & '" & _' & @CRLF Else $sBinary &= ' "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF EndIf Next $sBinary = StringTrimRight($sBinary, 5) ClipPut($sBinary) ConsoleWrite($sBinary)Now for what's really important... Executable file causes a computer to perform indicated tasks according to encoded instructions. Files that we talk about are in PE format. When exe file is run special loader reads it and performs act of loading. That's how that particular exe gets in touch with a processor. Processor then executes different actions described by the opcodes. Main requirement for any PE file required by the loader is for it to actually exist. To be written on the drive. It can't be in the air. That's not allowed and when you think of it it's only logical. So how to run from memory? I'm gonna fool the system. It will think that all works as it should and will have no idea that it plays my game. There is more than way of doing that. Method described here has been used by different peoples before. When doing research for this post I have encountered many implementations. And I must say that I was very disappointed seeing that even the writers of the code often lack understanding of it. It's kind of pathetic when you see some code used and when asking author what's this or that you get answer "I don't know". And if you ask for the code to be explained by words (any fucking human language) coders fail terribly. How can you write code if you can't explain it?!? Anyway, this is the procedure: Start your script Create new process using CreateProcess function with CREATE_SUSPENDED flag Use GetThreadContext function to fill CONTEXT structure Read and interpret passed binary Allocate enough memory for the new module inside the victim process Simulate loader. Construct the new module (load) in place of allocated space. Make use of mentioned CONTEXT structure. Change entry point data and ImageBaseAddress data. Resume execution If all that went well windows should now be running not the original module but the new, saved in script as a variable. The script: RunBinary.au3 Script is well commented so it shouldn't be too hard to get a grip. New script is taking all possible advantages of PE format. That means if your module (embedded) has relocation directory it will run for sure.If not it could fail. When it will fail? Modules with no reloc directory (IMAGE_DIRECTORY_ENTRY_BASERELOC) ought to be loaded at precise address (stored within module; IMAGE_OPTIONAL_HEADER ImageBase). If for some reason not enough space can be allocated at that address within victim's memory space, function will fail. Thing is system makes rules, if we are not allowed to some memory space of a process there is nothing to do then to try again. So, try again if it fails. Maybe change the 'victim'. edit: 64bit support added. That means you can embed either x64 or x86 modules. If your AutoIt is x64 you embed x64 modules. If AutoIt is x86 embed x86. x64 AutoIt could also use embedded x86 modules but I don't like that because needed structures would have to be changed to something that's not meeting aesthetics standards .
    1 point
  5. spudw2k

    ADODB Example

    Man, seems like I've been waiting for days for the site to come back up so I could post this. I'm putting together a Scan Engine tool that collects system info (via WMI, Reg, etc...). It will collectively store the data on either a SQL server, or local MDB. Here's a simple UDF I made to handle the ADODB stuff. I'll share the rest (Scan Engine Builder) when it's ready. _ADODB.au3 #Region - Constants and Variables Global $objConnection = ObjCreate("ADODB.Connection") Global $objRecordSet = ObjCreate("ADODB.Recordset") Global $errADODB = ObjEvent("AutoIt.Error","_ErrADODB") Global $adCurrentProvider = 0 Global $adCurrentDataSource = 0 Const $adOpenForwardOnly = 0 Const $adOpenKeyset = 1 Const $adOpenDynamic = 2 Const $adOpenStatic = 3 Const $adLockReadOnly = 1 Const $adLockPessimistic = 2 Const $adLockOptimistic = 3 Const $adLockBatchOptimistic = 4 Const $adProviderSQLOLEDB = "SQLOLEDB" Const $adProviderMSJET4 = "Microsoft.Jet.OLEDB.4.0" Const $adProviderMSJET12 = "Microsoft.ACE.OLEDB.12.0" #EndRegion #Region - Functions, Subs, Methods Func _AddColumn($varTableName,$varColumnName,$varColumnType) If Not IsObj($objConnection) Then Return -1 $strAddCol = "ALTER TABLE " & $varTableName & " ADD " & $varColumnName & " " & $varColumnType Return $objConnection.Execute($strAddCol) EndFunc Func _CloseConnection() Return $objConnection.Close EndFunc Func _CloseRecordSet() Return $objRecordSet.Close EndFunc Func _CreateDatabase($varDatabaseName=0) If $adCurrentProvider = $adProviderMSJET4 Then $objADOXCatalog = ObjCreate("ADOX.Catalog") $strProvider = "Provider=" & $adCurrentProvider & ";Data Source=" & $adCurrentDataSource $objADOXCatalog.Create($strProvider) $objADOXCatalog = 0 Return 0 ElseIf $varDatabaseName Then $objConnection.Execute("CREATE DATABASE " & $varDatabaseName) Return $objConnection.Execute("USE " & $varDatabaseName) EndIf Return 0 EndFunc Func _CreateTable($varTableName,$arrFields) If Not IsObj($objConnection) Then Return -1 If Not IsString($varTableName) Then Return -2 If Not IsArray($arrFields) Then Return -3 $varFields = "" $varFieldCount = Ubound($arrFields)-1 For $x = 0 to $varFieldCount $varFields &= $arrFields[$x] If $x < $varFieldCount Then $varFields &= " ," Next Return $objConnection.Execute("CREATE TABLE " & $varTableName & "(" & $varFields & ")") EndFunc Func _DropColumn($varTableName,$varColumnName) If Not IsObj($objConnection) Then Return -1 $strDropCol = "ALTER TABLE " & $varTableName & " DROP COLUMN " & $varColumnName Return $objConnection.Execute($strDropCol) EndFunc Func _DropDatabase($varDatabaseName=0) If Not IsObj($objConnection) Then Return -1 If $adCurrentProvider = $adProviderMSJET4 Then _CloseConnection() If MsgBox(4+16,"Are you sure?","Are you sure you want to delete" & @CRLF & $adCurrentDataSource & " ?" & @CRLF & @CRLF & "This Cannot Be Undone!") = 6 Then Return FileDelete($adCurrentDataSource) EndIf Else $objConnection.Execute("USE master") Return $objConnection.Execute("DROP DATABASE " & $varDatabaseName) EndIf EndFunc Func _DropTable($varTableName) If Not IsObj($objConnection) Then Return -1 Return $objConnection.Execute("DROP TABLE " & $varTableName) EndFunc Func _GetRecords($varTable,$arrSelectFields,$arrWhereFields=0) If Not IsObj($objConnection) Then Return -1 If Not IsObj($objRecordSet) Then Return -2 _OpenRecordset($varTable,$arrSelectFields,$arrWhereFields) If Not $objRecordSet.RecordCount Or ($objRecordSet.EOF = True) Then Return -3 Dim $arrRecords $arrRecords = $objRecordSet.GetRows() _CloseRecordSet() Return $arrRecords EndFunc Func _GetTablesAndColumns($varSystemTables=0) If Not IsObj($objConnection) Then Return -1 $objADOXCatalog = ObjCreate("ADOX.Catalog") $objADOXCatalog.ActiveConnection = $objConnection Dim $arrTables[1][2]=[['Table Name','Columns Array']] Dim $arrColumns[1][2]=[['Column Name','Column Type']] For $objTable In $objADOXCatalog.Tables Local $varSkipTable = 0 If Not $varSystemTables Then If StringInstr($objTable.Type,"SYSTEM") or StringInstr($objTable.Name,"MSys")=1 Then $varSkipTable = 1 EndIf If Not $varSkipTable Then ReDim $arrTables[UBound($arrTables)+1][2] $arrTables[UBound($arrTables)-1][0] = $objTable.Name ReDim $arrColumns[1][2] For $objColumn in $objTable.Columns ReDim $arrColumns[UBound($arrColumns)+1][2] $arrColumns[UBound($arrColumns)-1][0] = $objColumn.Name $arrColumns[UBound($arrColumns)-1][1] = $objColumn.Type Next $arrTables[UBound($arrTables)-1][1] = $arrColumns EndIf Next $objADOXCatalog = 0 Return $arrTables EndFunc Func _InsertRecords($varTableName,$arrFieldsAndValues) If Not IsObj($objConnection) Then Return -1 If Not IsArray($arrFieldsAndValues) Then Return -2 For $y = 1 To UBound($arrFieldsAndValues)-1 $strInsert = "INSERT INTO " & $varTableName & " (" $varFieldCount = UBound($arrFieldsAndValues,2)-1 For $x = 0 To $varFieldCount $strInsert &= $arrFieldsAndValues[0][$x] If $x < $varFieldCount Then $strInsert &= "," Next $strInsert &= ") VALUES (" For $x = 0 To $varFieldCount $strInsert &= "'" & $arrFieldsAndValues[$y][$x] & "'" If $x < $varFieldCount Then $strInsert &= "," Next $strInsert &= ");" $objConnection.Execute($strInsert) If $errADODB.number Then If Msgbox(4+16+256,"Insert Record Error","Statement failed:" & @CRLF & $strInsert & @CRLF & @CRLF & "Would you like to continue?") <> 6 Then Return -3 EndIf Next Return 1 EndFunc Func _OpenConnection($varProvider,$varDataSource,$varTrusted=0,$varInitalCatalog="",$varUser="",$varPass="") If Not IsObj($objConnection) Then Return -1 $adCurrentDataSource = $varDataSource $adCurrentProvider = $varProvider If $adCurrentProvider = $adProviderMSJET4 Then If Not FileExists($adCurrentDataSource) Then If MsgBox(4+16,$adCurrentDataSource & " does not exist.","Would you like to attempt" & @CRLF & "to create it?") = 6 Then _CreateDatabase() Else Return 0 EndIf EndIf EndIf $strConnect = "Provider=" & $adCurrentProvider & ";Data Source=" & $adCurrentDataSource & ";" If $varTrusted Then $strConnect &= "Trusted_Connection=Yes;" If $varUser Then $strConnect &= "User ID=" & $varUser & ";" If $varPass Then $strConnect &= "Password=" & $varPass & ";" $objConnection.Open($strConnect) If $varInitalCatalog Then Return $objConnection.Execute("USE " & $varInitalCatalog) Else Return 1 EndIf EndFunc Func _OpenRecordset($varTable,$arrSelectFields,$arrWhereFields=0,$varCursorType=$adOpenForwardOnly,$varLockType=$adLockReadOnly) If Not IsObj($objConnection) Then Return -1 If Not IsObj($objRecordSet) Then Return -2 $strOpen = "SELECT " $varFieldCount = UBound($arrSelectFields)-1 For $x = 0 to $varFieldCount $strOpen &= "[" & $arrSelectFields[$x] & "]" If $x < $varFieldCount Then $strOpen &= ", " Next $strOpen &= " FROM " & $varTable If IsArray($arrWhereFields) Then $strOpen &= " WHERE " $varFieldCount = UBound($arrWhereFields)-1 For $x = 0 to $varFieldCount $strOpen &= $arrWhereFields[$x] If $x < $varFieldCount Then $strOpen &= ", " Next EndIf Return $objRecordSet.Open($strOpen,$objConnection,$varCursorType,$varLockType) EndFunc Func _ErrADODB() Msgbox(0,"ADODB COM Error","We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $errADODB.description & @CRLF & _ "err.windescription:" & @TAB & $errADODB.windescription & @CRLF & _ "err.number is: " & @TAB & hex($errADODB.number,8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $errADODB.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $errADODB.scriptline & @CRLF & _ "err.source is: " & @TAB & $errADODB.source & @CRLF & _ "err.helpfile is: " & @TAB & $errADODB.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $errADODB.helpcontext _ ) Local $err = $errADODB.number If $err = 0 Then $err = -1 EndFunc #EndRegion Demo Script #include <_ADODB.au3> #include <Array.au3> ;Only needed for This Demo Script $adCurrentProvider = $adProviderMSJET4 ;Microsoft.Jet.OLEDB.4.0 $adCurrentDataSource = @ScriptDir & "\TEMPDB.MDB" ;Establish ADO Connection _OpenConnection($adCurrentProvider,$adCurrentDataSource) ;Create Table Dim $arrFields[3]=["Firstname VARCHAR(50)","Lastname VARCHAR(50)","AnotherField VARCHAR(50)"] ;Init Fields for Table Creation _CreateTable("TestTable",$arrFields) ;Insert Record Dim $arrFieldsandValues[3][3]=[["Firstname","Lastname","AnotherField"],["John","Smith","Rulez"],["Dave","Thomas","Rulez"]] ;Init Fields and Values for Insert _InsertRecords("TestTable",$arrFieldsandValues) ;Retrieve Records from Table Dim $arrSelectFields[3]=["Firstname","Lastname","AnotherField"] ;Init Select Fields for Recordset $arrRecords = _GetRecords("TestTable",$arrSelectFields) _ArrayDisplay($arrRecords) ;Retrieve Records from Table with Where Clause Dim $arrWhereFields[1]=["Firstname = 'Dave'"] $arrRecords = _GetRecords("TestTable",$arrSelectFields,$arrWhereFields) _ArrayDisplay($arrRecords) ;Capture Tables and Colums $tables = _GetTablesAndColumns(1) ;Param causes display if SYSTEM tables. Default (no param) hides these tables _ArrayDisplay($tables) ;Display Tables For $x = 1 to UBound($tables)-1 ;Display Table Columns _ArrayDisplay($tables[$x][1],"Table Name: " & $tables[$x][0]) Next ;Add Column to Table _AddColumn("TestTable","Field2","VARCHAR(10)") ;Drop Column from Table _DropColumn("TestTable","Field2") ;Drop Table _DropTable("TestTable") ;Drop Database _DropDatabase() ;Closes ADO Connection first if using MS.JET.OLEDB.4.0 ;Close ADO Connection ;_CloseConnection() edit: Made a few small changes. I added the ability to create JET DB Files (.MDB) so it is a bit more useful for demo purposes. Added Where Clause to Example Sooner or later I'll modify the GetTablesAndColumns to translate the field types into the literal data types (text,int,date,etc...) and make a more meaningful demo (Multiple tables and what ever else I can think of or someone recommends). edit: Made a few changes based on inputs from Kinshima in post #10 edit: changed _GetRecords() func based on input from @‌kvcinu
    1 point
  6. #include <Array.au3> #include <AutoITConstants.au3> ;From JLogan3o13 @ https://www.autoitscript.com/forum/topic/191287-search-wmic-for-installed-software/ Local $sAppName, $oWMI, $aSystem, $ComputerList = @ScriptDir & "\ComputerNames.txt", $LogFile = @ScriptDir & "\LogFile.txt", $sPC = FileReadToArray($ComputerList) _ArrayDisplay($sPC) ;Debug If Not FileExists($ComputerList) Then MsgBox(48, "Error", "Missing the computer list file : " & @CRLF & $ComputerList & @CRLF & @CRLF & "Please make sure it exist then run the script again.") Exit EndIf FileWriteLine($LogFile, @CRLF) FileWriteLine($LogFile, @MON & "/" & @MDAY & "/" & @YEAR & " - " & @HOUR & ":" & @MIN & ":" & @SEC & " Software Check Started" & @CRLF) ;$sPC = "<Computer Name>" $sAppName = ".Net" For $i = 0 To UBound($sPC) - 1 If Ping($sPC, 2000) Then $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sPC[$i] & "\root\cimv2") If IsObj($oWMI) Then $aSystem = $oWMI.ExecQuery("Select * from Win32_Product") For $oApp In $aSystem ;If StringInStr($oApp.Name, $sAppName) Then ConsoleWrite($sPC[$i] & "Application: " & $oApp.Name & "Version: " & $oApp.Version & @CRLF) If StringInStr($oApp.Name, $sAppName) Then FileWriteLine($LogFile, $sPC[$i] & "," & $oApp.Name & "," & $oApp.Version & @CRLF) Next Else ;ConsoleWrite("Unable to connect to WMI on " & $sPC[$i] & @CRLF) FileWriteLine($LogFile, $sPC[$i] & "," & "Offline" & @CRLF) EndIf EndIf Next
    1 point
  7. Thank you @JLogan3o13 This worked well. I add a array of remote computer names and I am currently running it. Seems to be going well. Thanks again!
    1 point
  8. @Danyfirex every single time this subject comes up, which seems to be about once a month, you come at it with the same "language is dying" type comment. No one is avoiding the question, in fact every thread of this nature ends up coming down to the same very simple statement - AutoIt has one owner, Jon. When he has time, and when he decides to pick up development, he will. The rest of us are just along for the ride, and I doubt a dozen "I want AutoIt to do X" threads are going to spur him to take time away from work that actually pays to add features to AutoIt. Why people cannot comprehend this I do not know. If you find more value in another language, use it! There are plenty of things I routinely have to turn to PowerCLI for; it's just the nature of any scripting language - no one language does everything. Recognize AutoIt for the value it provides, and where it doesn't add value to your work, find a tool that does.
    1 point
  9. When something get not updated. It start to die... I don't know why must of MVP-developers here always are avoiding this questions. but good after all you are the developers. there are many people waiting something more of AutoIt. AutoIt could be improve/better but there are not AutoIt developer actually that's the truth. I going to stop writing know because I don't want my account banned lol maybe waht I said hurt someone... I really Love AutoIt for fast developing no too much related to GUI design of course. I use it every day and when I don't I miss it. lol AutoIt a progamming lenguage?. Totally yes a full Programming language. @TheDcoder You can use Mono C#. Saludos
    1 point
  10. Here is a PowerShell method of removing duplicate lines from an unsorted file, from within AutoIt. It may be faster on big files. On small files, KaFu's example is faster. ; Remove Duplicate Rows From A Text File Using Powershell... unsorted file, where order is important. ; Command from: http://www.secretgeek.net/ps_duplicates Local $hTimer = TimerInit() local $sFileIn = @ScriptDir & '\temp-6.txt' local $sFileOut = @ScriptDir & '\newlist.txt' Local $sCmd = '$hash = @{}' & @CRLF & _ 'gc ' & $sFileIn & '| % {if ($hash.$_ -eq $null) {$_} $hash.$_ = 1;} > ' & $sFileOut RunWait('"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" ' & $sCmd, "", @SW_HIDE, 2 + 4) ; Run command in PowerShell. ConsoleWrite("Time Taken: " & round(TimerDiff($hTimer)/1000,4) & "Secs" & @CRLF) ShellExecute($sFileOut) ; See unique file.
    1 point
  11. i was agreeing. customer service issues with the ill informed sucks. and software signing should not help with the ML and heuristic detections (as those should be detonations/behavioral and signing wouldnt change that), though I have no faith those arent triggering on something static.
    1 point
  12. See post #160 in this thread, VirusTotal is a joke and completely unreliable. Stop flogging the dead horse, it's not going to rise from the dead.
    1 point
  13. Let powershell do the job https://stackoverflow.com/questions/32385611/sort-very-large-text-file-in-powershell
    1 point
  14. KaFu

    IconImage UDF

    Porting SMF to 3.3.14.2 made an update to this one necessary... who had the crazy idea to update the field names of $tagBITMAPINFO and $tagBITMAPINFOHEADER anyhow? IconImage_UDF_3.3.14.2 (2017-Nov-21).zip
    1 point
  15. For who wants it: ; Unicode Normalization Forms Global Enum $UNF_NormC = 1, $UNF_NormD, $UNF_NormKC = 5, $UNF_NormKD Func _UNF_Change($sIn, $iForm) If $iForm = $UNF_NormC Or $iForm = $UNF_NormD Or $iForm = $UNF_NormKC Or $iForm = $UNF_NormKD Then Local $aRet = DllCall("Normaliz.dll", "int", "NormalizeString", "int", $iForm, "wstr", $sIn, "int", -1, "ptr", 0, "int", 0) Local $tOut = DllStructCreate("wchar[" & $aRet[0] & "]") $aRet = DllCall("Normaliz.dll", "int", "NormalizeString", "int", $iForm, "wstr", $sIn, "int", -1, "ptr", DllStructGetPtr($tOut, 1), "int", $aRet[0]) Return DllStructGetData($tOut, 1) Else SetError(1, 0, $sIn) EndIf EndFunc _Example() Func _Example() Local $sStringToCheck1 = 'Jeżeli' Local $sStringToCheck2 = 'Jeżeli' MsgBox(0, 'Binary', StringToBinary($sStringToCheck1) & @CRLF & StringToBinary($sStringToCheck2)) MsgBox(0, 'Using ==', $sStringToCheck1 == $sStringToCheck2) MsgBox(0, 'Using =', $sStringToCheck1 = $sStringToCheck2) MsgBox(0, 'Using StringCompare', StringCompare($sStringToCheck1, $sStringToCheck2) ? 'Distinct' : 'Same') MsgBox(0, '== after normalization', _UNF_Change($sStringToCheck1, $UNF_NormC) == _UNF_Change($sStringToCheck2, $UNF_NormC)) EndFunc
    1 point
  16. Right now, as far as I see, in Win10, the controls for Win32 are needlessly "uglyfied" So incorporation of other abilities would be welcomed. Then again, AutoIt was meant to be an automation utility and not a programming language but we all use it as a programming language. Very far from the initial intention. Then again, since we are here, might as well, working on expanding it would be cool. Then again, without a restructure of the AutoIt language ( that would likely be incompatible to v3 ) to make incorporating other technologies, would make no sense and therefore making it v4. Then again, we, the scripting kids, would like to do what real programmers do, from the coding language we already know, and one thing is true: writing in AutoIt is so efficient !, it makes it beautiful. ( I just wanted to have this say, well knowing that is very unlikely to change anything, but is my way to pray to the gods of the AutoIt realm )
    1 point
  17. Just wondering: Do you just want an increase of the version or are you lacking functionality? Sounds like a nice challenge for somebody to build a set of UDF's? General remark although it isn't really up to me as I don't do any development in AutoIt3: It is indeed correct not much has happened this last year and there is no defined roadmap with dates. Doubt this is an issue at this moment as we have a pretty stable general purpose scripting language, and do not know how windows will evolve over the years to come whether this will be an issue anytime soon. Jos
    1 point
  18. Jos

    SCITE

    Then maybe you should have refrained from commenting, as there are pretty clear questions there? Jos
    1 point
  19. Page2PagePro

    ADODB Example

    FYI. If working in a 64-bit (x64) environment and using Office x86 (32-bit) which is very common, be sure you specify NOT to compile 64-bit. Otherwise you may experience COM Errors "Provider cannot be found. It may not be installed properly." #Region #AutoIt3Wrapper_UseX64=N #EndRegionIf you do NOT have two Data Sources shortcuts in Control Panel --> Administrative Tools, I'd recommend doing the following: Rename Existing "Data Sources (ODBC)" to "Data Sources (ODBC) 64-bit (x64)".Target: %windir%\system32\odbcad32.exeStart in: %windir%\system32Copy "Data Sources (ODBC) 64-bit (x64)" to "Data Sources (ODBC) 32-bit (x86)".Target: %windir%\syswow64\odbcad32.exeStart in: %windir%\syswow64(YES! The default "System32" is 64-bit. The "SysWow64" is 32-bit) Using the above shortcuts, you'll notice that if you try to "Create a New Data Source" under 64-bit, Access (Jet) will not be listed. Hope this makes sense. References: https://msdn.microsoft.com/en-us/library/cc645931.aspx https://support.microsoft.com/en-us/kb/942976 http://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64.htm
    1 point
×
×
  • Create New...