Jump to content

New to Arrays and getting error

Recommended Posts

Hello, I've been playing with Arrays and I'm receiving this error code:

"C:\Users\datea\Desktop\New AutoIt v3 Script.au3" (32) : ==> Subscript used on non-accessible variable.:
If BitAND(WinGetState($var[$i][1]), 2) and ($aWinRect[2] >= @DesktopWidth) Or ($aWinRect[3] >= @DesktopHeight) then
If BitAND(WinGetState($var[$i][1]), 2) and ($aWinRect[2] >= @DesktopWidth) Or ($aWinRect^ ERROR

I have found that by opening certain windows when checking for a Maximized window for instance [Class:Shell_TrayWnd] or [CLASS:NotifyIconOverflowWindow] or Opening the Calendar, Side Windows 10 Panel or Volume button I receive this error. I believe it's mostly irrelevant because it only happens sometimes and the code works just find most of the time.

I'm new to error checking and creating an "@error" for arrays. I think I need to implement a

If @error then ContinueLoop  

But I'm not exactly sure how to achieve this because the error is inside the Array I believe?

Here is my code snippet that I'm working on

#include <WinAPI.au3>
Opt("WinTitleMatchMode", 4)
Opt("WinSearchChildren", 1)


While 1
    $tmp = _AggIsFullScreen()
    If $tmp = 1 and ProcessExists("rainmeter.exe") then
        run("cmd.exe /c taskkill /im rainmeter.exe /f", "", @SW_HIDE)
    elseif $tmp = 0 and not ProcessExists("rainmeter.exe") then
        Run("C:\Program Files\Rainmeter\rainmeter.exe", "C:\Program Files\Rainmeter", @SW_HIDE)

Func _AggIsFullScreen()
    $xMousePos = MouseGetPos(0)
    $yMousePos = MouseGetPos(1)
    Local $iPid
;    Local $iWin
    Local $hwnd = WinGetHandle ("[ACTIVE]")
    Local $aWinRect = WinGetPos ($hwnd)
    Local $var = WinList("[REGEXPTITLE:^(?!Microsoft Text Input Application|Program Manager)(?s).*]")
    If $xMousePos >= 0 AND $xMousePos < @DesktopWidth AND $yMousePos >= 0 AND $yMousePos < @DesktopHeight and Not WinActive("[CLASS:NotifyIconOverflowWindow]") And Not WinActive("[Class:Shell_TrayWnd]") Then
        For $i = 1 To $var[0][0]
;            $iWin = $var[$i][1]
            If BitAND(WinGetState($var[$i][1]), 2) and ($aWinRect[2] >= @DesktopWidth) Or ($aWinRect[3] >= @DesktopHeight) then ; is visible
                $iPid = WinGetProcess($var[$i][1])
                If ProcessExists($iPid) Then
                    return 1
                    return 0
        return -1

Thank you

- red

Link to post
Share on other sites
  • Developers

You will have to test whether this statement actually did find something  and created the array:   

 Local $aWinRect = WinGetPos ($hwnd)

Check the Helpfile how to do that. ;) 


SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
Live for the present,
Dream of the future,
Learn from the past.

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.

  • Create New...