BigDaddyO Posted December 19, 2005 Share Posted December 19, 2005 I have a large script with about 60 - 70 functions in it. if one of those functions locks up or gets stuck waiting for a window that is not showing up, I want to be able to skip that function and move on to the next one. I wanted to use a hotkey but I can't figure out how to exit one function from another. Is this possible?The functions contain tests that are inside if statements. after the if statements the function cleans up the testing process and updates the Test data on the server. What I would really like is to simply exit the If statements in the current Function so it will still process the clean up portion of the function.Hopefully someone can understand what I am asking.I almost think I should put an overview of how my script works in my signature so whenever I ask another question I can just say please see signature for more info... hmm. I think I will do that.Thanks,Mike Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted December 19, 2005 Moderators Share Posted December 19, 2005 WinWait("WindowName", TimeToWait) If Not WinExists("WindowName") Then NextFunction() ?? Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
BigDaddyO Posted December 19, 2005 Author Share Posted December 19, 2005 Yes, I know, that is what my if statements inside these functions are doing mostly. waiting until a specific window opens, but the problem is that some windows I have to wait up to 10 minutes because they are SLOW web apps and I am running some tests on fairly slow comptuers. So if I know the application won't load as if I see an error message... I would like to just hit say, F3 and the function would then close and it will move on to the next function "test" Mike Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted December 19, 2005 Moderators Share Posted December 19, 2005 Dim $WindowErrorName = "What ever title the window throws an error" Dim $CorrectWindow = "Window your waiting 10 minutes on" Func WindowTestOne() $Timer = TimerInit() While TimerDiff($Timer) / 1000 * 60 < 10 Sleep(100) If WinExists($WindowErrorName) Then SomeOtherFunction() If WinExists($CorrectWindow) Then ExitLoop WEnd If TimerDiff($Timer) / 1000 * 60 >= 10 And Not WinExists($CorrectWindow) Then SomeOtherFunction() ; The Commands I want to do If the right window was found. EndFunc I really don't understand the F3 thing, if you're wanting it to be fully auto, or you trying to do user interaction. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
seandisanti Posted December 19, 2005 Share Posted December 19, 2005 Yes, I know, that is what my if statements inside these functions are doing mostly. waiting until a specific window opens, but the problem is that some windows I have to wait up to 10 minutes because they are SLOW web apps and I am running some tests on fairly slow comptuers. So if I know the application won't load as if I see an error message... I would like to just hit say, F3 and the function would then close and it will move on to the next function "test" Mikemaybe try a variable that can be set via hotkey function to say whether a loop should keep running or not? HotKeySet("{ESCAPE}","TESTFUNC") $toggle = 1 Func TESTFUNC() If $toggle = 1 Then $toggle = 0 Else $toggle = 1 EndIf EndFunc testing() $toggle = 1 testing2() Func testing() while $toggle Sleep(100) WEnd MsgBox(0,"moving on","leaving function 1") EndFunc Func testing2() while $toggle Sleep(100) WEnd MsgBox(0,"moving on","leaving function 2") EndFunc Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted December 19, 2005 Moderators Share Posted December 19, 2005 (edited) Or you could use cameronsdads... I re-thought mine a bit, I kind of liked the timer idea... so here is a bit of a redo. Dim $WindowErrorName = "What ever title the window throws an error" Dim $CorrectWindow = "Window your waiting 10 minutes on" Func WindowTestOne() Local $Timer = TimerInit() Local $Checked = 1 While TimerDiff($Timer) / 1000 / 60 < 10 Sleep(100) If WinExists($WindowErrorName) Then SomeOtherFunction() If WinExists($CorrectWindow) Then ExitLoop If TimerDiff($Timer) / 1000 / 60 >= 2 And $Checked = 1 Then $Checked = 2 $iMsg = MsgBox(32 + 4, "Not Loaded", "The Window Has Not Loaded" & @CRLF & "Would You like to wait a little longer?") If $iMsg = 7 Then SomeOtherFunction() ElseIf TimerDiff($Timer) / 1000 / 60 >= 5 And $Checked = 2 Then $Checked = 0 $iMsg = MsgBox(32 + 4, "Not Loaded", "The Window Has Not Loaded" & @CRLF & "Would You like to wait a little longer?") If $iMsg = 7 Then SomeOtherFunction() EndIf WEnd If TimerDiff($Timer) / 1000 / 60 >= 10 And Not WinExists($CorrectWindow) Then SomeOtherFunction() ; The Commands I want to do If the right window was found. EndFunc Giving the user the choice to wait or not. Edit: had * 60 should be / 60, didn't fix the first one if you use them, this is the correct one now. Edited December 19, 2005 by SmOke_N Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
BigDaddyO Posted December 19, 2005 Author Share Posted December 19, 2005 Thanks Guys, By looking at your reply's I came up with the following. Using this function I won't need to modify much of my script. I just replace the lines: if winwaitactive("Program Name", "", 60) Then with if _WaitForIT("Program Name", "", 60) = 0 Then Global $SkipIT = 0 Dim $loops = "" HotKeySet("{F3}", "_SkipIT") _TestApp001() Func _TestApp001() if _WaitForIT("Untitled - Notepad", "", 60) = 0 Then Send("The window is now active") Else MsgBox(0, "Error", "Window did not show") EndIf EndFunc Func _WaitForIT($Title, $text, $Wait) While Not WinActive($Title, $text) sleep(90) if $SkipIT = 1 then Global $SkipIT = 0 Return 1 EndIf if $loops >= $Wait then Return 1 $loops = $loops + .1 WEnd Return EndFunc Func _SkipIT() Global $SkipIT = 1 EndFunc Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now