Jump to content
Sign in to follow this  
johnmcloud

[SOLVED] Button on active window

Recommended Posts

johnmcloud

Hi guys,

I'd like to add a simple button on active window. This is what i have done:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

HotKeySet("{Esc}", "_Exit")

Global $Width = 80
Global $Height = 30

$GUI = GUICreate("Test", $Width, $Height, 0, 0, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$Button = GUICtrlCreateButton("Button", 0, 0, $Width, $Height)
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
MsgBox(0, 0, "Test")
EndSwitch
Move()
WEnd

Func _Exit()
Exit 0
EndFunc ;==>_Exit

Func Move()
Local $size = WinGetPos("[active]")
Local $x = $size[0] + $size[2] - ($Width * 2.5)
Local $y = $size[1]
WinSetOnTop("Test", "", 1)
WinMove($GUI, "", $x, $y)
EndFunc ;==>Move

I have a couple of problem:

1) If no windows is selected, i see a phantom moving button :D you can easily see, just adjust the speed:

WinMove($GUI, "", $x, $y, 80, 30, 100)

I want to see the button only if a active windows exist, not over the desktop

2) The button not work, when you click on it...disappears

Please help me out to improve the script/resolve this problems,

Thanks ;)

EDIT: I have reposted the script, the autoit code have some problem

Edited by johnmcloud

Share this post


Link to post
Share on other sites
johnmcloud

UPDATE: New Script:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

HotKeySet("{Esc}", "_Exit")

Global $Width = 60
Global $Height = 25

$GUI = GUICreate("Test", $Width, $Height, 0, 0, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$Button = GUICtrlCreateButton("Button", 0, 0, $Width, $Height)
GUISetState(@SW_SHOWNOACTIVATE)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit
  Case $Button
   MsgBox(0, 0, "Test")
EndSwitch
Move()
WEnd

Func _Exit()
Exit 0
EndFunc   ;==>_Exit

Func Move()
WinSetOnTop("Test", "", 1)
Local $size = WinGetPos("[active]")
Local $name = WinGetTitle("[active]")
Local $x = $size[0] + $size[2] - ($Width * 2.5)
Local $y = $size[1]
If $name <> "Test" Then
  WinMove($GUI, "", $x, $y)
EndIf
EndFunc   ;==>Move

Resolved:

1) Now button work ;)

2) No more phantom button moving

To Resolve:

1) Don't show button on desktop

2) Give to the last active window the focus, it lose

Please if someone know how to improve/resolve post here,

Thanks ;)

Edited by johnmcloud

Share this post


Link to post
Share on other sites
FireFox

Hi,

It's not perfect, but this is how I would do it (without thinking how I could do it better) :

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

HotKeySet("{ESC}", "_Exit")

Global $Width = 60, $Height = 25, $hLastActiveWnd = -1, $hDesktopWnd = WinGetHandle("[TITLE:Program Manager;CLASS:Progman]")

$GUI = GUICreate("Test", $Width, $Height, 0, 0, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$Button = GUICtrlCreateButton("Button", 0, 0, $Width, $Height)
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button
            MsgBox(64, "", "Test")
    EndSwitch

    Move()
    Sleep(50)
WEnd

Func _Exit()
    Exit
EndFunc   ;==>_Exit

Func Move()
    Local $hActiveWnd = WinGetHandle("[active]")

    If $hActiveWnd <> $hLastActiveWnd And $hActiveWnd <> $hDesktopWnd Then
        Local $aSize = WinGetClientSize($hActiveWnd)
        If Not IsArray($aSize) Then Return ;Exit Func

        _WinAPI_SetParent($GUI, $hActiveWnd)

        WinMove($GUI, "", $aSize[0] - ($Width * 2.5), 10)

        If Not WinActive($hActiveWnd) Then WinActivate($hActiveWnd)

        $hLastActiveWnd = $hActiveWnd
    EndIf
EndFunc   ;==>Move

Br, FireFox.


 

OS : Win XP SP2 (32 bits) / Win 7 SP1 (64 bits) / Win 8 (64 bits) | Autoit version: latest stable / beta.
Hardware : Intel(R) Core(TM) i5-2400 CPU @ 3.10Ghz / 8 GiB RAM DDR3.

My UDFs : Skype UDF | TrayIconEx UDF | GUI Panel UDF | Excel XML UDF | Is_Pressed_UDF

My Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme maker

My Examples : Capture toolIP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewer

My Snippets : Basic TCP | Systray_GetIconIndex | Intercept End task | Winpcap various | Advanced HotKeySet | Transparent Edit control

 

Share this post


Link to post
Share on other sites
johnmcloud

Thanks FireFox, but work wroste then mine, i can't click on the button, if i reduce the size of the window the button will disappear etc..

Thanks for trying, for now i'll tring to make the focus to the previus windows when you click on the button, how to do?

Maybe with WinList() but the help doesn' help me ;)

Edited by johnmcloud

Share this post


Link to post
Share on other sites
FireFox

I suggest you to create the button on every visible window :

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

HotKeySet("{ESC}", "_Exit")

Opt("GUIOnEventMode", 1)

Global $iWidth = 60, $iHeight = 25, $hDesktopWnd = WinGetHandle("[TITLE:Program Manager;CLASS:Progman]")

Global $aWinList = WinList()

For $iWnd = 1 To $aWinList[0][0]
    ; Only display visble windows that have a title
    If $aWinList[$iWnd][0] <> "" And IsVisible($aWinList[$iWnd][1]) Then
        If $aWinList[$iWnd][1] <> $hDesktopWnd Then
            _AttachGUI($aWinList[$iWnd][1])
        EndIf
    EndIf
Next

While 1
    Sleep(1000)
WEnd

Func _Exit()
    Exit
EndFunc   ;==>_Exit

Func _AttachGUI($hWnd)
    Local $aSize = WinGetClientSize($hWnd)
    If Not IsArray($aSize) Then Return ;Exit Func

    $GUI = GUICreate("Test", $iWidth, $iHeight, $aSize[0] - $iWidth - 10, 10, $WS_CHILD, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST), $hWnd)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

    GUICtrlCreateButton("Button", 0, 0, $iWidth, $iHeight)
    GUICtrlSetOnEvent(-1, "_toto")

    GUISetState(@SW_SHOW, $GUI)
    _WinAPI_SetParent($GUI, $hWnd) ;GUICreate parent param does not work on all wnds
EndFunc   ;==>_AttachGUI

Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
        Return 1
    Else
        Return 0
    EndIf
EndFunc   ;==>IsVisible

Func _toto()
    MsgBox(64, "", "toto")
EndFunc   ;==>_toto

Then you can check for every new wnd (add attached wnds handle into an array)

Edit : You should add the SciTE wnd to the exclude list, it does not work properly (or find another way).

Br, FireFox.

Edited by FireFox

 

OS : Win XP SP2 (32 bits) / Win 7 SP1 (64 bits) / Win 8 (64 bits) | Autoit version: latest stable / beta.
Hardware : Intel(R) Core(TM) i5-2400 CPU @ 3.10Ghz / 8 GiB RAM DDR3.

My UDFs : Skype UDF | TrayIconEx UDF | GUI Panel UDF | Excel XML UDF | Is_Pressed_UDF

My Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme maker

My Examples : Capture toolIP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewer

My Snippets : Basic TCP | Systray_GetIconIndex | Intercept End task | Winpcap various | Advanced HotKeySet | Transparent Edit control

 

Share this post


Link to post
Share on other sites
IanN1990

My little attempt at your problem

It no longer displays a active button on desktop, taskbar or menu. I only have windows 7 so i donno if it will work on other OS's.

One idea i did have is maybe. On the active-window, u get the style of the window "and if the style is one with a windows border, min, max, close. Then to add your button"

Here is the code for just the desktop problem + improving perfomnce load on cpu.

#Notrayicon ;Makes the script start faster, easier for me to test and i hate tray icons :)
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

local $HandleStore
local $ActiveSizeStore[2]
local $Temp ;This is used to stop it moving the GUI tones, when its not needed. Mostly wasted on good pcs, but i perfer programing with performance in  mind.
local $ArrayOfActiveWindows[1]

$GUI = GUICreate("Test", 60, 25, 0, 0, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$Button = GUICtrlCreateButton("Button", 0, 0, 60, 25)
GUISetState(@SW_SHOWNOACTIVATE)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit
Case $Button
   _ArrayDisplay($ArrayOfActiveWindows)
  ; MsgBox(0, 0, "Test")
EndSwitch
Move()
WEnd

Func Move()
$ActiveHandle = WinGetHandle("[Active]")
$ActiveTitle = WinGetTitle($ActiveHandle)
If $ActiveTitle = "Test" or $ActiveTitle = "Start menu" or $ActiveTitle = "Program Manager" or StringRight(WinGetText($ActiveHandle), 21) > "Running applications" Then Return 0 ;Stops It being shown on desktop or taskbar

If Not($HandleStore = $ActiveHandle) Then
   For $i = 0 to ubound($ArrayOfActiveWindows)-1
 If $ArrayOfActiveWindows[$i] = $ActiveHandle then
_ArrayDelete($ArrayOfActiveWindows,$i)
ExitLoop
 EndIf
   Next
   _ArrayAdd($ArrayOfActiveWindows, $ActiveHandle)
WinSetOnTop("Test", "", 1) ;See top comment on why i have done this as wellif
ConsoleWrite("A")
EndIf

$HandleStore = $ActiveHandle 

$ActiveSize = WinGetPos($ActiveHandle)
If IsArray($ActiveSize) Then
   If Not($ActiveSize[0] = $ActiveSizeStore[0]) or Not($ActiveSize[1] = $ActiveSizeStore[1]) Then $Temp = 2
   If $Temp > 0 Then
 WinMove($GUI, "", $ActiveSize[0] + $ActiveSize[2]-150, $ActiveSize[1]) ;I know this looks ulgy, and i did try and better lookink away but it causes "lag" where this is no lag while still being kind 2 the cpu as its only run 3 times per any movement rather then unlimited.
 $Temp -= 1
   EndIf
$ActiveSizeStore = $ActiveSize
EndIf
EndFunc   ;==>Move

**Edit Fixed a small problem by when the button became active, it causes a endless loop of moving the button :>

**Edit Newer version with Array support for rememebring Focus windows (not finished yet, it can only remember not act) still working on it.

Edited by IanN1990

Share this post


Link to post
Share on other sites
johnmcloud

Nice IanN1990, there is only one problem, the focus didn't come to the previus windows.

On my first script i have add the WinList() and WinActivate() for the focus problem and work fine.

But not work on your. The focus it's the major problem, if example i want to create a "Copy" button ( Send("^c") ) need to do:

1) Click on "copy" button

2) Give focus to the previus window ( ==>_WinPrevious )

3) Send("^c")

With my original script work, but don't know on your script where to add this.

Thanks

EDIT: Solved, i have removed the array part, now work very well. Thanks guys, without your help without you I would not have been able to resolve ;)

Edited by johnmcloud

Share this post


Link to post
Share on other sites
IanN1990

Yea, i was working on the array part but then got called away with family bussniness and didn't get a chance to finish it *which is also why it was only half finished, all it did was record which windows you had been to, and kept your most active windows at the top of the array list" :( I am sry about that but i am glad at lest one part was helpful to you :)

Is there any chance you could post your finished product, as i would like to have a look. I was have thinking of using it on my pc as well.

Share this post


Link to post
Share on other sites
johnmcloud

Is there any chance you could post your finished product, as i would like to have a look. I was have thinking of using it on my pc as well.

Sure, why not. I'll post the script when is all completed ;)

Share this post


Link to post
Share on other sites
kylomas

johnmcloud,

This is all very interesting, but, what is it good for?

kylomas


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
IanN1990

@John So, were you ever able to get it all finished and polished nicely ?

Share this post


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
Sign in to follow this  

  • Similar Content

    • kcvinu
      By kcvinu
      Hi all,
      I have a button created with _GUICtrlButton_Create function. I know that this function returns a handle of button instead of an ID. So i have obtain control ID by calling _WinAPI_GetDlgCtrlID function. After that i have tried the GUICtrlSetBkColor function. But it didnt worked. Any suggestions will be appreciated. Thanks in advance. 
      Note : - The window which carries this button is not created with native gui create function. Instead, it is created with CreateWindowEx api function.
    • AdamUL
      By AdamUL
      Here is a function that will return a 2D array of visible windows.  You will notice that windows "Start" and "Program Manager"  windows will always be in the array.  The array returns the title of the window, the window handle, the PID of the process associated with the window, the process name associated with the window, the window's position, and the window's dimension,  Please see comments in the code about the numbers returned about the window's position.
       
      #include <Array.au3> #include <Process.au3> ;Get a list of visable windows with titles. $aWindows = _GetVisibleWindows() _ArrayDisplay($aWindows) Func _GetVisibleWindows() ;Retrieve a list of windows. Local $aWinList = WinList() If Not IsArray($aWinList) Then Return SetError(0, 0, 0) ;Loop through the array deleting no title or invisable windows. Local $sDeleteRows = "" For $i = 1 To $aWinList[0][0] If $aWinList[$i][0] = "" Or Not BitAND(WinGetState($aWinList[$i][1]), $WIN_STATE_VISIBLE) Then $sDeleteRows &= $i & ";" EndIf Next $sDeleteRows = StringTrimRight($sDeleteRows, 1) ;Remove last ";". _ArrayDelete($aWinList, $sDeleteRows) $aWinList[0][0] = UBound($aWinList) - 1 ;Get Window's Processor ID (PID), and add to the array. _ArrayColInsert($aWinList, UBound($aWinList, 2)) For $i = 1 To $aWinList[0][0] $aWinList[$i][2] = WinGetProcess($aWinList[$i][1]) Next ;Get Window's Process Name from PID, and add to the array. _ArrayColInsert($aWinList, UBound($aWinList, 2)) For $i = 1 To $aWinList[0][0] $aWinList[$i][3] = _ProcessGetName($aWinList[$i][2]) Next ;Get Windows's Position and Size, and add it to the array. ;For Position, -3200,-3200 is minimized window, -8,-8 is maximized window on 1st display, and ;x,-8 is maximized windown on the nth display were x is the nth display width plus -8 (W + -8). _ArrayColInsert($aWinList, UBound($aWinList, 2)) ;Position (X,Y). _ArrayColInsert($aWinList, UBound($aWinList, 2)) ;Dimension (WxH). Local $aWinPosSize For $i = 1 To $aWinList[0][0] $aWinPosSize = WinGetPos($aWinList[$i][1]) $aWinList[$i][4] = $aWinPosSize[0] & "," & $aWinPosSize[1] $aWinList[$i][5] = $aWinPosSize[2] & "x" & $aWinPosSize[3] Next Return $aWinList EndFunc ;==>_GetVisibleWindows  
      Adam
       
    • Bilgus
      By Bilgus
      Literally just a list of listview styles / extended styles and WS / WSEX styles prints them in the console by their name
      ;Debug ;Debug_GetLvMStyles($g_hListView) ;Debug_GetHDStyles($g_hListView) ;Debug_GetWSStyles($g_hListView) ;Debug_GetWSStyles($g_hWnd) ;;#include <ListViewConstants.au3> Func Debug_GetLvMStyles($hListView) Local $LVStyle = _WinAPI_GetWindowLong($hListView, -16) Local $LVExStyle = _GUICtrlListView_GetExtendedListViewStyle($hListView) Local $sLVSTYLES Local $sLVExSTYLES If @error Then ConsoleWrite(" Error Debug_GetLvMStyles Couldn't retrieve Styles") Return EndIf If BitAND($LVStyle, $LVS_ALIGNLEFT) Then $sLVSTYLES &= "$LVS_ALIGNLEFT, " If BitAND($LVStyle, $LVS_ALIGNMASK) Then $sLVSTYLES &= "$LVS_ALIGNMASK, " If BitAND($LVStyle, $LVS_ALIGNTOP) Then $sLVSTYLES &= "$LVS_ALIGNTOP, " If BitAND($LVStyle, $LVS_AUTOARRANGE) Then $sLVSTYLES &= "$LVS_AUTOARRANGE, " If BitAND($LVStyle, $LVS_DEFAULT) Then $sLVSTYLES &= "LVS_DEFAULT," If BitAND($LVStyle, $LVS_EDITLABELS) Then $sLVSTYLES &= "LVS_EDITLABELS, " If BitAND($LVStyle, $LVS_ICON) Then $sLVSTYLES &= "LVS_ICON, " If BitAND($LVStyle, $LVS_LIST) Then $sLVSTYLES &= "LVS_LIST, " If BitAND($LVStyle, $LVS_NOCOLUMNHEADER) Then $sLVSTYLES &= "LVS_NOCOLUMNHEADER, " If BitAND($LVStyle, $LVS_NOLABELWRAP) Then $sLVSTYLES &= "LVS_NOLABELWRAP, " If BitAND($LVStyle, $LVS_NOSCROLL) Then $sLVSTYLES &= "LVS_NOSCROLL, " If BitAND($LVStyle, $LVS_NOSORTHEADER) Then $sLVSTYLES &= "LVS_NOSORTHEADER, " If BitAND($LVStyle, $LVS_OWNERDATA) Then $sLVSTYLES &= "LVS_OWNERDATA, " If BitAND($LVStyle, $LVS_OWNERDRAWFIXED) Then $sLVSTYLES &= "LVS_OWNERDRAWFIXED, " If BitAND($LVStyle, $LVS_REPORT) Then $sLVSTYLES &= "LVS_REPORT, " If BitAND($LVStyle, $LVS_SHAREIMAGELISTS) Then $sLVSTYLES &= "LVS_SHAREIMAGELISTS, " If BitAND($LVStyle, $LVS_SHOWSELALWAYS) Then $sLVSTYLES &= "LVS_SHOWSELALWAYS, " If BitAND($LVStyle, $LVS_SINGLESEL) Then $sLVSTYLES &= "LVS_SINGLESEL, " If BitAND($LVStyle, $LVS_SMALLICON) Then $sLVSTYLES &= "LVS_SMALLICON, " If BitAND($LVStyle, $LVS_SORTASCENDING) Then $sLVSTYLES &= "LVS_SORTASCENDING, " If BitAND($LVStyle, $LVS_SORTDESCENDING) Then $sLVSTYLES &= "LVS_SORTDESCENDING, " If BitAND($LVStyle, $LVS_TYPEMASK) Then $sLVSTYLES &= "LVS_TYPEMASK, " If BitAND($LVStyle, $LVS_TYPESTYLEMASK) Then $sLVSTYLES &= "LVS_TYPESTYLEMASK, " If BitAND($LVExStyle, $LVS_EX_AUTOAUTOARRANGE) Then $sLVExSTYLES &= "$LVS_EX_AUTOARRANGE, " If BitAND($LVExStyle, $LVS_EX_AUTOCHECKSELECT) Then $sLVExSTYLES &= "$LVS_EX_AUTOCHECKSELECT, " If BitAND($LVExStyle, $LVS_EX_AUTOSIZECOLUMNS) Then $sLVExSTYLES &= "$LVS_EX_AUTOSIZECOLUMNS, " If BitAND($LVExStyle, $LVS_EX_BORDERSELECT) Then $sLVExSTYLES &= "$LVS_EX_BORDERSELECT, " If BitAND($LVExStyle, $LVS_EX_CHECKBOXES) Then $sLVExSTYLES &= "$LVS_EX_CHECKBOXES, " If BitAND($LVExStyle, $LVS_EX_COLUMNOVERFLOW) Then $sLVExSTYLES &= "$LVS_EX_COLUMNOVERFLOW, " If BitAND($LVExStyle, $LVS_EX_COLUMNSNAPPOINTS) Then $sLVExSTYLES &= "$LVS_EX_COLUMNSNAPPOINTS, " If BitAND($LVExStyle, $LVS_EX_DOUBLEBUFFER) Then $sLVExSTYLES &= "$LVS_EX_DOUBLEBUFFER, " If BitAND($LVExStyle, $LVS_EX_FLATSB) Then $sLVExSTYLES &= "$LVS_EX_FLATSB, " If BitAND($LVExStyle, $LVS_EX_FULLROWSELECT) Then $sLVExSTYLES &= "$LVS_EX_FULLROWSELECT, " If BitAND($LVExStyle, $LVS_EX_GRIDLINES) Then $sLVExSTYLES &= "$LVS_EX_GRIDLINES, " If BitAND($LVExStyle, $LVS_EX_HEADERDRAGDROP) Then $sLVExSTYLES &= "$LVS_EX_HEADERDRAGDROP, " If BitAND($LVExStyle, $LVS_EX_HEADERINALLVIEWS) Then $sLVExSTYLES &= "$LVS_EX_HEADERINALLVIEWS, " If BitAND($LVExStyle, $LVS_EX_HIDELABELS) Then $sLVExSTYLES &= "$LVS_EX_HIDELABELS, " If BitAND($LVExStyle, $LVS_EX_INFOTIP) Then $sLVExSTYLES &= "$LVS_EX_INFOTIP, " If BitAND($LVExStyle, $LVS_EX_JUSTIFYCOLUMNS) Then $sLVExSTYLES &= "$LVS_EX_JUSTIFYCOLUMNS, " If BitAND($LVExStyle, $LVS_EX_LABELTIP) Then $sLVExSTYLES &= "$LVS_EX_LABELTIP, " If BitAND($LVExStyle, $LVS_EX_MULTIWORKAREAS) Then $sLVExSTYLES &= "$LVS_EX_MULTIWORKAREAS, " If BitAND($LVExStyle, $LVS_EX_ONECLICKACTIVATE) Then $sLVExSTYLES &= "$LVS_EX_ONECLICKACTIVATE, " If BitAND($LVExStyle, $LVS_EX_REGIONAL) Then $sLVExSTYLES &= "$LVS_EX_REGIONAL, " If BitAND($LVExStyle, $LVS_EX_SIMPLESELECT) Then $sLVExSTYLES &= "$LVS_EX_SIMPLESELECT, " If BitAND($LVExStyle, $LVS_EX_SNAPTOGRID) Then $sLVExSTYLES &= "$LVS_EX_SNAPTOGRID, " If BitAND($LVExStyle, $LVS_EX_SUBITEMIMAGES) Then $sLVExSTYLES &= "$LVS_EX_SUBITEMIMAGES, " If BitAND($LVExStyle, $LVS_EX_TRACKSELECT) Then $sLVExSTYLES &= "$LVS_EX_TRACKSELECT, " If BitAND($LVExStyle, $LVS_EX_TRANSPARENTBKGND) Then $sLVExSTYLES &= "$LVS_EX_TRANSPARENTBACKGROUND, " If BitAND($LVExStyle, $LVS_EX_TRANSPARENTSHADOWTEXT) Then $sLVExSTYLES &= "$LVS_EX_TRANSPARENTTEXTSHADOW, " If BitAND($LVExStyle, $LVS_EX_TWOCLICKACTIVATE) Then $sLVExSTYLES &= "$LVS_EX_TWOCLICKACTIVATE, " If BitAND($LVExStyle, $LVS_EX_UNDERLINECOLD) Then $sLVExSTYLES &= "$LVS_EX_UNDERLINECOLD, " If BitAND($LVExStyle, $LVS_EX_UNDERLINEHOT) Then $sLVExSTYLES &= "$LVS_EX_UNDERLINEHOT, " ConsoleWrite("Lv Styles= " & $sLVSTYLES & @CRLF) ConsoleWrite("Lv Ex Styles= " & $sLVExSTYLES & @CRLF) EndFunc ;==>Debug_GetLvMStyles ;;#include <HeaderConstants.au3> Func Debug_GetHDStyles($hListView) Local $hHeader = _GUICtrlListView_GetHeader($hListView) Local $HDStyle = _WinAPI_GetWindowLong($hHeader, -16) Local $sHDSTYLES If @error Then ConsoleWrite(" Error Debug_GetHDStyles Couldn't retrieve Styles") Return EndIf If BitAND($HDStyle, $HDS_BUTTONS) Then $sHDSTYLES &= "$HDS_STYLES, " ;0x00000002 ; Each item in the control looks and behaves like a push button If BitAND($HDStyle, $HDS_CHECKBOXES) Then $sHDSTYLES &= "$HDS_CHECKBOXES, " ;0x00000400 ; Allows the placing of checkbo ;es on header items on Vista If BitAND($HDStyle, $HDS_DRAGDROP) Then $sHDSTYLES &= "$HDS_DRAGDROP, " ;0x00000040 ; Allows drag-and-drop reordering of header items If BitAND($HDStyle, $HDS_FILTERBAR) Then $sHDSTYLES &= "$HDS_FILTERBAR, " ;0x00000100 ; Include a filter bar as part of the standard header control If BitAND($HDStyle, $HDS_FLAT) Then $sHDSTYLES &= "$HDS_FLAT, " ;0x00000200 ; Control is drawn flat when XP is running in classic mode If BitAND($HDStyle, $HDS_FULLDRAG) Then $sHDSTYLES &= "$HDS_FULLDRAG, " ;0x00000080 ; Column contents are displayed while the user resizes a column If BitAND($HDStyle, $HDS_HIDDEN) Then $sHDSTYLES &= "$HDS_HIDDEN, " ;0x00000008 ; Indicates a header control that is intended to be hidden If BitAND($HDStyle, $HDS_HORZ) Then $sHDSTYLES &= "$HDS_HORZ, " ;0x00000000 ; Creates a header control with a horizontal orientation If BitAND($HDStyle, $HDS_HOTTRACK) Then $sHDSTYLES &= "$HDS_HOTTRACK, " ;0x00000004 ; Enables hot tracking If BitAND($HDStyle, $HDS_NOSIZING) Then $sHDSTYLES &= "$HDS_NOSIZING, " ;0x0800 ; The user cannot drag the divider on the header control on Vista If BitAND($HDStyle, $HDS_OVERFLOW) Then $sHDSTYLES &= "$HDS_OVERFLOW, " ;0x1000 ; A button is displayed when not all items can be displayed within the header control's rectangle on Vista If BitAND($HDStyle, $HDS_DEFAULT) Then $sHDSTYLES &= "$HDS_DEFAULT, " ;0x00000046 ; Default header style $HDS_DRAGDROP + $HDS_HOTTRACK + $HDS_BUTTONS ConsoleWrite("Header Styles= " & $sHDSTYLES & @CRLF) EndFunc ;==>Debug_GetHDStyles Func Debug_GetWSStyles($hWnd) ;#include <WindowsConstants.au3> Local $WSStyle = _WinAPI_GetWindowLong($hWnd, -16) Local $sWSSTYLES Local $WSEXStyle = _WinAPI_GetWindowLong($hWnd, -20) ;_GUICtrlListView_GetExtendedListViewStyle($hListView); Local $sWSEXSTYLES If @error Then ConsoleWrite(" Error Debug_GetWSStyles Couldn't retrieve Styles") Return EndIf If BitAND($WSStyle, $WS_OVERLAPPED) Then $sWSSTYLES &= "$WS_OVERLAPPED, " If BitAND($WSStyle, $WS_TILED) Then $sWSSTYLES &= "$WS_TILED, " If BitAND($WSStyle, $WS_MAXIMIZEBOX) Then $sWSSTYLES &= "$WS_MAXIMIZEBOX, " ;0x00010000 If BitAND($WSStyle, $WS_MINIMIZEBOX) Then $sWSSTYLES &= "$WS_MINIMIZEBOX, " ;0x00020000 If BitAND($WSStyle, $WS_TABSTOP) Then $sWSSTYLES &= "$WS_TABSTOP, " ;0x00010000 If BitAND($WSStyle, $WS_GROUP) Then $sWSSTYLES &= "$WS_GROUP, " ;0x00020000 If BitAND($WSStyle, $WS_SIZEBOX) Then $sWSSTYLES &= "$WS_SIZEBOX, " ;0x00040000 If BitAND($WSStyle, $WS_THICKFRAME) Then $sWSSTYLES &= "$WS_THICKFRAME, " If BitAND($WSStyle, $WS_SYSMENU) Then $sWSSTYLES &= "$WS_SYSMENU, " ;0x00080000 If BitAND($WSStyle, $WS_HSCROLL) Then $sWSSTYLES &= "$WS_HSCROLL, " ;0x00100000 If BitAND($WSStyle, $WS_VSCROLL) Then $sWSSTYLES &= "$WS_VSCROLL, " ;0x00200000 If BitAND($WSStyle, $WS_DLGFRAME) Then $sWSSTYLES &= "$WS_DLGFRAME, " ;0x00400000 If BitAND($WSStyle, $WS_BORDER) Then $sWSSTYLES &= "$WS_BORDER, " ;0x00800000 If BitAND($WSStyle, $WS_CAPTION) Then $sWSSTYLES &= "$WS_CAPTION, " ;0x00C00000 If BitAND($WSStyle, $WS_OVERLAPPEDWINDOW) Then $sWSSTYLES &= "$WS_OVERLAPPEDWINDOW, " If BitAND($WSStyle, $WS_TILEDWINDOW) Then $sWSSTYLES &= "$WS_TILEDWINDOW, " If BitAND($WSStyle, $WS_MAXIMIZE) Then $sWSSTYLES &= "$WS_MAXIMIZE, " ;0x01000000 If BitAND($WSStyle, $WS_CLIPCHILDREN) Then $sWSSTYLES &= "$WS_CLIPCHILDREN, " ;0x02000000 If BitAND($WSStyle, $WS_CLIPSIBLINGS) Then $sWSSTYLES &= "$WS_CLIPSIBLINGS, " ;0x04000000 If BitAND($WSStyle, $WS_DISABLED) Then $sWSSTYLES &= "$WS_DISABLED, " ;0x08000000 If BitAND($WSStyle, $WS_VISIBLE) Then $sWSSTYLES &= "$WS_VISIBLE, " ;0x10000000 If BitAND($WSStyle, $WS_MINIMIZE) Then $sWSSTYLES &= "$WS_MINIMIZE, " ;0x20000000 If BitAND($WSStyle, $WS_ICONIC) Then $sWSSTYLES &= "$WS_ICONIC, " If BitAND($WSStyle, $WS_CHILD) Then $sWSSTYLES &= "$WS_CHILD, " ;0x40000000 If BitAND($WSStyle, $WS_CHILDWINDOW) Then $sWSSTYLES &= "$WS_CHILDWINDOW, " If BitAND($WSStyle, $WS_POPUP) Then $sWSSTYLES &= "$WS_POPUP, " ;0x80000000 If BitAND($WSStyle, $WS_POPUPWINDOW) Then $sWSSTYLES &= "$WS_POPUPWINDOW, " ;0x80880000 If BitAND($WSEXStyle, $WS_EX_ACCEPTFILES) Then $sWSEXSTYLES &= "$WS_EX_ACCEPTFILES, " ;0x00000010 If BitAND($WSEXStyle, $WS_EX_APPWINDOW) Then $sWSEXSTYLES &= "$WS_EX_APPWINDOW, " ;0x00040000 If BitAND($WSEXStyle, $WS_EX_COMPOSITED) Then $sWSEXSTYLES &= "$WS_EX_COMPOSITED, " ;0x02000000 If BitAND($WSEXStyle, $WS_EX_CONTROLPARENT) Then $sWSEXSTYLES &= "$WS_EX_CONTROLPARENT, " ;0x10000 If BitAND($WSEXStyle, $WS_EX_CLIENTEDGE) Then $sWSEXSTYLES &= "$WS_EX_CLIENTEDGE, " ;0x00000200 If BitAND($WSEXStyle, $WS_EX_CONTEXTHELP) Then $sWSEXSTYLES &= "$WS_EX_CONTEXTHELP, " ;0x00000400 If BitAND($WSEXStyle, $WS_EX_DLGMODALFRAME) Then $sWSEXSTYLES &= "$WS_EX_DLGMODALFRAME, " ;0x00000001 If BitAND($WSEXStyle, $WS_EX_LAYERED) Then $sWSEXSTYLES &= "$WS_EX_LAYERED, " ;0x00080000 If BitAND($WSEXStyle, $WS_EX_LAYOUTRTL) Then $sWSEXSTYLES &= "$WS_EX_LAYOUTRTL, " ;0x400000 If BitAND($WSEXStyle, $WS_EX_LEFT) Then $sWSEXSTYLES &= "$WS_EX_LEFT, " ;0x00000000 If BitAND($WSEXStyle, $WS_EX_LEFTSCROLLBAR) Then $sWSEXSTYLES &= "$WS_EX_LEFTSCROLLBAR, " ;0x00004000 If BitAND($WSEXStyle, $WS_EX_LTRREADING) Then $sWSEXSTYLES &= "$WS_EX_LTRREADING, " ;0x00000000 If BitAND($WSEXStyle, $WS_EX_MDICHILD) Then $sWSEXSTYLES &= "$WS_EX_MDICHILD, " ;0x00000040 If BitAND($WSEXStyle, $WS_EX_NOACTIVATE) Then $sWSEXSTYLES &= "$WS_EX_NOACTIVATE, " ;0x08000000 If BitAND($WSEXStyle, $WS_EX_NOINHERITLAYOUT) Then $sWSEXSTYLES &= "$WS_EX_NOINHERITLAYOUT, " ;0x00100000 If BitAND($WSEXStyle, $WS_EX_NOPARENTNOTIFY) Then $sWSEXSTYLES &= "$WS_EX_NOPARENTNOTIFY, " ;0x00000004 If BitAND($WSEXStyle, $WS_EX_RIGHT) Then $sWSEXSTYLES &= "$WS_EX_RIGHT, " ;0x00001000 If BitAND($WSEXStyle, $WS_EX_RIGHTSCROLLBAR) Then $sWSEXSTYLES &= "$WS_EX_RIGHTSCROLLBAR, " ;0x00000000 If BitAND($WSEXStyle, $WS_EX_RTLREADING) Then $sWSEXSTYLES &= "$WS_EX_RTLREADING, " ;0x2000 If BitAND($WSEXStyle, $WS_EX_STATICEDGE) Then $sWSEXSTYLES &= "$WS_EX_STATICEDGE, " ;0x00020000 If BitAND($WSEXStyle, $WS_EX_TOOLWINDOW) Then $sWSEXSTYLES &= "$WS_EX_TOOLWINDOW, " ;0x00000080 If BitAND($WSEXStyle, $WS_EX_TOPMOST) Then $sWSEXSTYLES &= "$WS_EX_TOPMOST, " ;0x00000008 If BitAND($WSEXStyle, $WS_EX_TRANSPARENT) Then $sWSEXSTYLES &= "$WS_EX_TRANSPARENT, " ;0x00000020 If BitAND($WSEXStyle, $WS_EX_WINDOWEDGE) Then $sWSEXSTYLES &= "$WS_EX_WINDOWEDGE, " ;0x00000100 If BitAND($WSEXStyle, $WS_EX_OVERLAPPEDWINDOW) Then $sWSEXSTYLES &= "$WS_EX_OVERLAPPEDWINDOW, " If BitAND($WSEXStyle, $WS_EX_PALETTEWINDOW) Then $sWSEXSTYLES &= "$WS_EX_PALETTEWINDOW, " ConsoleWrite("WS Styles= " & $sWSSTYLES & @CRLF) ConsoleWrite("WS EX Styles= " & $sWSEXSTYLES & @CRLF) EndFunc ;==>Debug_GetWSStyles  
    • Robdog1955
      By Robdog1955
      I'm trying to click a button on a web page. I have added a couple of MsgBox lines to allow me to watch what happens on the page. As you can see the first half of my script enters data into text boxes on the page. I have no problem there. I just cannot click on the region buttons. The "set focus" line causes an outline to appear around the EU button and the "click button" line causes the "Pick a Region" text to disappear. Here is the code I have so far.
      #include <IE.au3> Local $oIE = _IECreate("http://questchecker.com/") Local $iQuestID = "123456" Local $sCharacterName = "CharacterName" Local $colForms = _IEFormGetCollection($oIE) $iCount = 0 For $oForm In $colForms $oFormElements = _IEFormElementGetCollection($oForm) For $oFormElement In $oFormElements $iCount = $iCount + 1 Local $sTagName = StringLower($oFormElement.tagName) Local $sElementType = $oFormElement.type Local $sElementName = $oFormElement.name Switch $iCount Case 6 _IEFormElementSetValue($oFormElement, "MyRealm", 0) ; realm Case 7 _IEFormElementSetValue($oFormElement, $sCharacterName, 0) Case 8 _IEFormElementSetValue($oFormElement, $iQuestID, 0) EndSwitch Next Next Local $oButtons = _IEGetObjByName($oIE, "questForm") For $oButton In $oButtons If _IEFormElementGetValue($oButton) = "US" Then MsgBox(0, "", "Click Okay to set focus") _IEAction($oButton, "focus") MsgBox(0, "", "Click Okay to click button") _IEAction($oButton, "click") ExitLoop EndIf Next MsgBox(0, "", "Click Okay to quit") _IEQuit($oIE) Exit  
    • ur
      By ur
      I am trying to identify the window based on the window title and text.
      The title will be the "erwin DM - filename"

      It is working till date, but some operating systems our application is displaying window as "erwin DM - [filename]"
       
      I tried  "erwin DM - *filename*" But this regular expression is not working.
      Any suggestion?
       
      $sModelFile = "C:\Users\Administrator\Documents\My Models\eMovies.erwin" $wdModel = _WinWaitActivate1("erwin DM - "&FileNameOnly($sModelFile),"") Func _WinWaitActivate1($title,$text,$timeout=0);Will Return the window Handler Logging("Waiting for "&$title&":"&$text) $dHandle = WinWait($title,$text,$timeout) if not ($dHandle = 0) then If Not WinActive($title,$text) Then WinActivate($title,$text) return WinWaitActive($title,$text,$timeout) Else Logging("Timeout occured while waiting for the window...") Exit EndIf EndFunc Func FileNameOnly($sFilePath) Local $sDrive = "", $sDir = "", $sFileName = "", $sExtension = "" Local $aPathSplit = _PathSplit($sFilePath, $sDrive, $sDir, $sFileName, $sExtension) ;_ArrayDisplay($aPathSplit, "_PathSplit of " & @ScriptFullPath) return $sFileName EndFunc  
×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.