RichardR Posted December 24, 2018 Posted December 24, 2018 Hello. In my script I find that using the following code runs eternally because @error is always 0 even when it shouldn't be. Func test() Local $t = 90, $c = 0, $ps Do $ps = PixelSearch(570, $t, 590, $t + 15, 0xCCD0D6, 15, 1, $Hwnd) MsgBox(0, "test", IsArray($ps) & ", " & "error = " & @error, 0, $Hwnd) If (@error = 0) Then $t += 25 $c += 1 EndIf Sleep(100) MsgBox(0, "test", "error = " & @error, 0, $eveHwnd) Until @error = 1 Return $c EndFunc The message box shows me that PixelSearch found something 4 times; but after that, isArray returns false but @error is also 0. This doesn't happen with a While...Wend loop. Any thoughts?
water Posted December 24, 2018 Posted December 24, 2018 Welcome to AutoIt and the forum! MsgBox overwrites @error. So you are checking the value of @error returned by MsgBox not by Pixelsearch. My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.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 (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
Moderators Melba23 Posted December 24, 2018 Moderators Posted December 24, 2018 (edited) RichardR, Welcome to the AutoIt forums. No bug - AutoIt resets @error each time you call a function - so your MsgBox call overwrites the return from the Pixelsearch line above it. Save the value of @error into a variable before calling the MsgBox and then use that variable in the comparison. M23 P.S Hi water! Edited December 24, 2018 by Melba23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
ajag Posted December 24, 2018 Posted December 24, 2018 as water says. Look at this: SetError (11) MsgBox(0, '', '@error = ' & @error) MsgBox(0, '', '@error = ' & @error) Rule #1: Always do a backup Rule #2: Always do a backup (backup of rule #1)
pixelsearch Posted December 24, 2018 Posted December 24, 2018 (edited) @ajag : I'll always remember the following one, very surprising when it happens to you the 1st time #include <MsgBoxConstants.au3> SetError (11) MsgBox(BitOr($MB_ICONWARNING, $MB_TOPMOST), "Surprise !", "@error = " & @error) @RichardR : welcome ! The help file is your best friend, just have a look at the SetError topic, all explanations are there. Good luck for your future scripts By the way, you wrote that "The message box shows me that PixelSearch found something 4 times..." It's true, i always check 4 times to make sure Edited December 24, 2018 by pixelsearch "I think you are searching a bug where there is no bug... don't listen to bad advice."
RichardR Posted January 8, 2019 Author Posted January 8, 2019 Thanks for explaining how @error works. I have looked at the help file many times. The MsgBox function didn't mention anything about setting the @error so I thought, at first, it had nothing to do with it. After reading about SetError, it seems that entering a function resets @error to 0. It also mentioned I should try storing @error in a variable which I already did. Thanks.
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