Jump to content

Recommended Posts

Posted

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?

Posted

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
Posted (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 by Melba23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

  • Melba23 changed the title to Auto it problem with @error and Do...Until loops
Posted (edited)

@ajag : I'll always remember the following one, very surprising when it happens to you the 1st time :D

#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 :P

Edited by pixelsearch

"I think you are searching a bug where there is no bug... don't listen to bad advice."

  • 2 weeks later...
Posted

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.

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.
×
×
  • Create New...