Jump to content

Recommended Posts

Local $a = 1
Local $v = Execute("$a+1") ; $v is set to 2

I've been wondering if there's something similar to Execute that would work with function names, something like:

Func _IncrementNumber($thisnumber)
    Return $thisnumber + 1
EndFunc

Local $Number = 10
Local $IncrementedNumber = ExecuteFunction("_IncrementNumber", $Number) ; $IncrementedNumber becomes 11

I haven't found anything similar to "ExecuteFunction" in the docs.

Link to post
Share on other sites

Execute takes any valid statement and executes it.

Func _IncrementNumber($thisnumber)
    Return $thisnumber + 1
EndFunc

Local $iNumber = 10
Local $iIncrementedNumber = Execute("_IncrementNumber(" & $iNumber & ")")
ConsoleWrite($iIncrementedNumber & @CRLF)

 

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to post
Share on other sites

Even this works:

Func _IncrementNumber($thisnumber)
    Return $thisnumber + 1
EndFunc

Local $iNumber = 10
AutoItSetOption("ExpandVarStrings", 1)
Local $iIncrementedNumber = Execute("_IncrementNumber($iNumber)")
ConsoleWrite($iIncrementedNumber & @CRLF)

 

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to post
Share on other sites

And here I was writing long Switch/Case combinations :P something like this:

Switch $Function
    Case "Function1"
        $ReturnValue = Function1()
    Case "Function2"
        $ReturnValue = Function2()
    Case "Function3"
        $ReturnValue = Function3()
EndSwitch

lol

 

3 minutes ago, water said:

Local $iIncrementedNumber = Execute("_IncrementNumber($iNumber)")

Wow, I love this :) Thank you, this is perfect!

Link to post
Share on other sites

This is made possible by

AutoItSetOption("ExpandVarStrings", 1)

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to post
Share on other sites

Also note that functions are first-class citizens in AutoIt.

ConsoleWrite(VarGetType(ConsoleWrite) & @LF)
ConsoleWrite(VarGetType(_MyFunc) & @LF)
Local $v = _MyFunc
ConsoleWrite($v() & @LF)

Func _MyFunc()
    Return("Done")
EndFunc

This way keeps you away from calling a badly formed function name, like Call("MyFunc")

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Link to post
Share on other sites
18 hours ago, water said:

Even this works:

Func _IncrementNumber($thisnumber)
    Return $thisnumber + 1
EndFunc

Local $iNumber = 10
AutoItSetOption("ExpandVarStrings", 1)
Local $iIncrementedNumber = Execute("_IncrementNumber($iNumber)")
ConsoleWrite($iIncrementedNumber & @CRLF)

 

 

18 hours ago, water said:

This is made possible by

AutoItSetOption("ExpandVarStrings", 1)

Hi @water.

The use of ExpandVarStrings seems to be redundant ;)

Your example works event if "ExpandVarStrings" is omitted.

example code to show why:

AutoItSetOption("ExpandVarStrings", 1)
global $iNumber = 123;
ConsoleWrite("_IncrementNumber($iNumber)"&@CRLF)
ConsoleWrite("_IncrementNumber($iNumber$)"&@CRLF)

To be clear, your example works perfectly fine, just wanted to clarify that ExpandVarStrings had nothing to do with it :)

Link to post
Share on other sites

My example

ConsoleWrite("_IncrementNumber($iNumber)"&@CRLF)

is wrong as it misses the trailing $.
ExpandVarStrings does exactly what it is supposed to do (tested using AutoIt 3.3.16.0):

AutoItSetOption("ExpandVarStrings", 0)
ConsoleWrite("_IncrementNumber($iNumber$)" & @CRLF)

returns "_IncrementNumber($iNumber$)" and

AutoItSetOption("ExpandVarStrings", 1)
ConsoleWrite("_IncrementNumber($iNumber$)" & @CRLF)

returns "_IncrementNumber(123)".

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to post
Share on other sites
Func _IncrementNumber($thisnumber)
    Return $thisnumber + 1
EndFunc

Local $iNumber = 10
Local $iIncrementedNumber = Execute("_IncrementNumber(" & $iNumber & ")")
ConsoleWrite($iIncrementedNumber & @CRLF)

$iIncrementedNumber = Execute("_IncrementNumber($iNumber)")
ConsoleWrite($iIncrementedNumber & @CRLF)

Both of these returned 11 for me without setting "ExpandVarStrings".

Link to post
Share on other sites

@noellarkin

Yes both  return 11 but that is not a failure of "ExpandVarStrings" but a feature of the Execute function.

You are not using the $var$-syntax for "ExpandVarString" in your example.

If you use the "ExpandVarString"-syntax you will see the difference.

See the expanded example program below.

Local $iNumber = 10
Local $iIncrementedNumber = Execute("_IncrementNumber(" & $iNumber & ")")
MyCheckForError()
If Not @error Then ConsoleWrite("A " & $iIncrementedNumber & @CRLF)

AutoItSetOption("ExpandVarStrings", 0)

$iIncrementedNumber = Execute("_IncrementNumber($iNumber$)")
MyCheckForError()
If Not @error Then ConsoleWrite("B " & $iIncrementedNumber & @CRLF)

AutoItSetOption("ExpandVarStrings", 1)

$iIncrementedNumber = Execute("_IncrementNumber($iNumber$)")
MyCheckForError()
If Not @error Then ConsoleWrite("C " & $iIncrementedNumber & @CRLF)

Func _IncrementNumber($thisnumber)
    Return $thisnumber + 1
EndFunc

Func MyCheckForError($iError = @error, $iExtended = @extended)
    If $ierror Then
        If opt("ExpandVarStrings") = 0 Then
            SetError($ierror, $iextended)
            ConsoleWrite("Execute failed!" & @CRLF)
            ConsoleWrite("error: " & @error & " extended: " & @extended & @CRLF)
            ConsoleWrite("ierror: " & $ierror & " iextended: " & $iextended & @CRLF)
        EndIf
        If opt("ExpandVarStrings") = 1 Then
            SetError($ierror, $iextended)
            ConsoleWrite("Execute failed!@CRLF@")
            ConsoleWrite("error: @error@ extended: @extended@" & @CRLF)
            ConsoleWrite("ierror: $ierror$ extended: @extended@" & @CRLF)
        EndIf
    EndIf
    Return SetError($ierror, $iextended)
EndFunc

 

 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By SkysLastChance
      I am trying to figure out why my mouse move does not end up in the same spot as the test version
      I am on the struggle bus. (Both Examples below)
      #include <IE.au3> Local $xWidth = 2 Local $xHeight = 2 Local $vOperator = '/' Local $oIE = _IE_Example("form") Local $oForm = _IEFormGetObjByName($oIE, "ExampleForm") Local $oTextArea = _IEGetObjByName($oForm, "imageExample") Local $iScreenX = _IEPropertyGet($oTextArea, "screenx") Local $iScreenY = _IEPropertyGet($oTextArea, "screeny") Local $iWidth = _IEPropertyGet($oTextArea, "width") Local $iHeight = _IEPropertyGet($oTextArea, "height") Local $iMousespeed = 20 MouseMove($iScreenX + $iWidth / 2, $iScreenY + $iHeight / 2, $iMousespeed) ;Test Example ;;MouseMove(Execute(($iScreenX + $iWidth) & $vOperator & $xWidth), Execute(($iScreenY + $iHeight) & $vOperator & $xHeight), 25) ;My Example  
    • By rkr
      Hi, I have a software which has a 'run file'-ie; when i double click on that file, the input file of the software is run by the software. I wish to double click/execute this run file using autoit. how do i achieve this. i opened the software and it shows the input file and run file in same folder, i will put my autoitscript file too in same location. how do i simulate double clicking the run file (using its file name, say - abc.run ). I entered the following lines to make software window active - it became active, dont know how to go forward
      Winactivate("program title")
      winwaitactivate("program title")
      controlclick("program title","abc.run",1000,"primary",2) ; 1000 is ctrl id
    • By SchneiMi
      Hello,
      following my previous question, I have moved all potentially instable object interactions into Executes. But it Looks like "="-assignments to object Attributes cannot be done with Execute, only method calls. Using an "$obj = 1" construct, it compares (Eval) instead of sets (Execute) the value.
      I have tested multiple different combinations, using Execute and Assign, but it seems not to work with object Attributes. :-(
      Gives following Output:
      The assign Action using apply (a3) Fails, while assigning it directly, without Assign() works fine.
      The execute versions compare and do not assign, in both cases. Though, the "Execute" topic in the help file says it executes, not evaluates.
      I have found a similar, old thread, which explains this behavious but does not give a solution. https://www.autoitscript.com/forum/topic/110228-pass-object-property-as-a-variable/  
      Is there a way to assign to a com object's Attribute? Or is there anything new to this unexpected behaviour of Execute (at least compared to the help file description and Python's exec).
       
      Any help is appreciated, and thank you for all the help so far.
      Regards, Michael
       
    • By hawkair
      Hi
      I am trying to insert line numbers in to a string
      with this script
      Func _MyInc () Static Local $i = 0 $i += 1 Return $i EndFunc Exit _InsertLines() Func _InsertLines()     $String = "A" & @CRLF & "B" & @CRLF & "C" & @CRLF & "D" $NewString =  Execute("'" & StringRegExpReplace($String,"[\r\n]*",  "' & _MyInc () & '\1" ) & "'") MsgBox (0, "", $NewString) EndFunc but I get this:
      1A23B45C67D8
      I never really could master how Execute works here and I always get some working example and make substitutions.
      But this is the closest i could get...
       
    • By cherrylatte
      hi
      I'm trying to execute files 
      I want it to run in order.
      for instance, if there's folder like below, I want to run 1.exe > 2.exe > 3.exe
      root folder
        |___folder 1 > 1.exe
        |___folder2 > 2.exe
        |___folder3 > 3.exe
       
      What I did to do the above, was to make a text file that contains the path to each of those files and put those in array form.
      but copying and pasting every path of those files into a text file is very exhausting thing to do when there's like hundreds of files to execute.
      So I was wondering if there is a simple way to run those files.
      I'd be thankful if anybody answers it. 
       
       
×
×
  • Create New...