Jump to content

WinActive/Activate bug?


Recommended Posts

Hi,

I am not sure if it's a bug or not, so here is what i got:

GUICreate("Test GUI", 300, 200)
;GUISetState(@SW_HIDE)

$sTitle = "Test GUI"
WinActivate($sTitle)

$IsActive_1 = (WinActive($sTitle) = 1)
$IsActive_2 = (BitAND(WinGetState($sTitle), 8) = 8)

ConsoleWrite("Win Is Visible: " & (BitAND(WinGetState($sTitle), 2) = 2) & @CRLF)
ConsoleWrite("Win Is Active (WinActive Method): " & $IsActive_1 & @CRLF)
ConsoleWrite("Win Is Active (WinGetState Method): " & $IsActive_2 & @CRLF)

As you can see in this test, the hidden window is "activated" (not really), and then when we trying to see if it's active we get True, but the window is not visible, how is that can be possible? :)

I first thought that the problem is in the WinActive() function, but then i checked with WinGetState(), and it's returning the same, window is active. So i gues the problem is in the WinActivate() function, wich is set the state for the window as Active (8) even if it's not visible.

P.S

Just wanted to post here and get some thoughts about it from others, before i submit a Bug Report (if it's a really a bug of course)...

 

Spoiler

Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1

AutoIt_Rus_Community.png AutoIt Russian Community

My Work...

Spoiler

AutoIt_Icon_small.pngProjects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize Program

AutoIt_Icon_small.pngUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF
 
AutoIt_Icon_small.pngExamples: 
ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo

Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating AutoIt_Rating.gif)

* === My topics === *

==================================================
My_Userbar.gif
==================================================

 

 

 

AutoIt is simple, subtle, elegant. © AutoIt Team

Link to comment
Share on other sites

  • Moderators

I think active simply means it's brought to the top of the z-order. Hidden windows can be brought to the top even though they are not visible.

$h_main = GUICreate("Test GUI", 300, 200)
$h_other = GUICreate("Look at my title bar when other window is active")
GUISetState(@SW_SHOW, $h_other)

Sleep(3000)
WinActivate($h_main)

$IsActive_1 = (WinActive($h_main) = 1)
$IsActive_2 = (BitAND(WinGetState($h_main), 8) = 8)

ConsoleWrite("Win Is Visible: " & (BitAND(WinGetState($h_main), 2) = 2) & @CRLF)
ConsoleWrite("Win Is Active (WinActive Method): " & $IsActive_1 & @CRLF)
ConsoleWrite("Win Is Active (WinGetState Method): " & $IsActive_2 & @CRLF)

While 1
    $a_msg = GUIGetMsg(1)
    Switch $a_msg[1]
        Case $h_other
            Switch $a_msg[0]
                Case -3
                    Exit
            EndSwitch
    EndSwitch
WEnd

That should show you that when you activate the hidden window, that the window that was active is no longer active (when you look at the title bar it greys out on mine for non-active windows).

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

Yes it's brought to the top, but perhaps WinActivate() function should work only for visible windows, and leave the "z-order handling" to WinSetState() function? :)

Or at least the docs must be update (warn about non visible windows).

P.S

Also in the help file for WinActivate() we can see some reference about the @extended, but no code explenation, here is a few tests that will show them:

If Not ProcessExists("Notepad.exe") Then
    WinActivate("[CLASS:Notepad]")
    ConsoleWrite("@extended = " & @extended & @CRLF) ;@extended = 0, window not exists, therefore it's can not be active :)
    
    Run(@WindowsDir & "\Notepad.exe")
EndIf

WinWait("[CLASS:Notepad]")

WinActivate("[CLASS:Notepad]")
ConsoleWrite("@extended = " & @extended & @CRLF) ;@extended = 1, window was *active*

WinSetState("[CLASS:Notepad]", "", @SW_MINIMIZE)

WinActivate("[CLASS:Notepad]")
ConsoleWrite("@extended = " & @extended & @CRLF) ;@extended = 2, window was *not* active (minimized)

 

Spoiler

Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1

AutoIt_Rus_Community.png AutoIt Russian Community

My Work...

Spoiler

AutoIt_Icon_small.pngProjects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize Program

AutoIt_Icon_small.pngUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF
 
AutoIt_Icon_small.pngExamples: 
ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo

Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating AutoIt_Rating.gif)

* === My topics === *

==================================================
My_Userbar.gif
==================================================

 

 

 

AutoIt is simple, subtle, elegant. © AutoIt Team

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...