genius257

Is it possible to throw an error in a ScriptControl object, via AutoIt

1 post in this topic

#1 ·  Posted (edited)

First of all I've been searching on the forum, and while there's been done something like this with: https://www.autoitscript.com/forum/topic/141004-comobject-proxy-seamless-windows-script-control-autoitobj/

I could not find any solution to my predicament.

 

Is it possible to throw an error in a ScriptControl object, via AutoIt?

I have a script, where AutoIt calls ScriptControl:JavaScript which in turn calls AutoIt.

However i would like to be able to make AutoIt invoke an exception within ScriptControl, if the called functionality fails.

Here's some code for reference:

#AutoIt3Wrapper_Run_AU3Check=n

#include-once
#include "AutoitObject.au3"
#include <WinAPIDiag.au3>

$oJS = ObjCreate("ScriptControl")
$oJS.Language = "JScript"
$oJS.TimeOut = 0; A value of 0 means that the ScriptControl will monitor the execution of the script and will trigger the Timeout event if it determines that the script is hung.
_AutoItObject_Startup()
$oAutoIt = _AutoItObject_Create()
_AutoItObject_AddMethod($oAutoIt, "Execute", "_Execute", False)
$oJS.AddObject("AutoIt", $oAutoIt, True)

OnAutoItExitRegister("_CleanUp")

$_AutoItError = ObjEvent("AutoIt.Error", "_AutoItError")

Func _CleanUp()
    ConsoleWrite("Cleaning up..."&@CRLF)
    $oJS = 0
    $oAutoIt = 0
    _AutoItObject_Shutdown()
EndFunc

Func _Execute($oSelf, $sString)
    $vReturn = Execute($sString)
    If @error<>0 Then Return $oJS.Eval("throw new SyntaxError();"); Does invoke exception, but not within the try/catch
    Return $vReturn
EndFunc

Func _AutoItError($oError)
    $oError2 = $oJS.Error
    ConsoleWrite( _
        "Column: " & $oError2.Column & @CRLF & _
        "Description: " & $oError2.Description & @CRLF & _
        "HelpContext: " & $oError2.HelpContext & @CRLF & _
        "HelpFile: " & $oError2.HelpFile & @CRLF & _
        "Line: " & $oError2.Line & @CRLF & _
        "Number: " & $oError2.Number & @CRLF & _
        "Source: " & $oError2.Source & @CRLF & _
        "Text: " & $oError2.Text & @CRLF _
    )
    $oError2.Clear()
EndFunc

$oJS.Eval("(function(){"& _
    "try{"& _
        "AutoIt.Execute('MsgBox(0,\'\', \'a\')');"& _
        "AutoIt.Execute('a.b');/*error should occur here*/"& _
        "AutoIt.Execute('MsgBox(0,\'\', \'b\')');"& _
    "}catch(e){"& _
        "AutoIt.Execute('ConsoleWrite(\'Error\'&@CRLF)');"& _
    "}"& _
"})()")

 

Edited by genius257

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

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

Create an account

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


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • Nareshm
      By Nareshm
      Please Somebody Help me i am trying to create new script but, i don't know how to create it.

      I am Creating script like this :
      ; My script here [First Script]
      Check the internet connection, if internet connected then
      ; My Script here [Second Script]
      If internet not connected, wait for connect, after connected run my second script
      If Control id/windows/title matched do nothing and end/exit autoit script
      If Control id/windows/title not matched repeat my first and second script again until control id/windows/tittle not matched

      match with :
      >>>> Window <<<<
      Title:    PS :: Version - 2.8.0.0  - [PS Bill]
      Class:    WindowsForm734a
      Position:    -8, -8
      Size:    1382, 744
      Style:    0x17CD0000
      ExStyle:    0x00050100
      Handle:    0x0000000000130572
      >>>> Control <<<<
      Class:    WindowsForm734a
      Instance:    15
      ClassnameNN:    WindowsForm34a15
      Name:    BillPrint
      Advanced (Class):    [NAME:BillPrint]
      ID:    7875
      Text:    
      Position:    39, 310
      Size:    1221, 306
      ControlClick Coords:    745, 20
      Style:    0x56010000
      ExStyle:    0x00000000
      Handle:    0x00000000000C0468
       
    • Nareshm
      By Nareshm
      I create message box but i dont know how to add button action when i click it.

      Help for : Add script for Button : Left, Right, Right Finger
      example when i press Left finger button do Case $idNotepad
                      $iPID = WinActivate ( " :PS :: Version - 2.8.0.0  - [eFS Bill]")
                              ControlSend(" :DS  - eF :: Version - 2.8.0.0  - [eF Bill]", "", "[NAME:btnReset]", "{esc}")
                              ControlClick ( " :DS  - eF :: Version - 2.8.0.0  - [eF Bill]", "", "[NAME:txtrdNo]")
                              ControlSend(" :DS  - eF:: Version - 2.8.0.0  - [eF Bill]", "", "[NAME:txtrdNo]", "^v")
                              ControlSend(" :DS  - eF :: Version - 2.8.0.0  - [eF Bill]", "", "[NAME:txtrdNo]", "{enter}")
      How to add like above ?
                    
                                                                sorry for my bad english
       
    • nacerbaaziz
      By nacerbaaziz
      Hi friends, I have a question, please.
      I have created a window containing a edit box
      I need to know how to change the keyboard language,
      e.g :
      if a user open the  script  it will be change the keyBord language   in window automatically into English
      I found more examples but didn't work with me .
      Note:  
       I use the windows 10 os
      Please help me .
      thanks in advance to all
      with my Greetings and my appreciation for all users and admins
    • JustinZandee
      By JustinZandee
      I want to create a loop which loops a code until for example f2 is pressed.
      So I tried something with _IsPressed but it doesn't work.
      Local $test = WinActivate("Notepad") Do Send("hi") Until _IsPressed("72", $test)  
      I don't know how I can do nothing when pressing f2 because it says "error: _IsPressed(): undefined function.".
      I did put 
      Send("hi") after Local $test = but it gives the same error.
      Does anyone know how to solve this problem? 
      Maybe I am wrong and I need to use a whole other Function.. I am new to AutoIT so I am sorry..
       
    • JustinZandee
      By JustinZandee
      I need a random string generator which creates 15 letters/numbers.
      How can I make that?