Jump to content
Sign in to follow this  

Always on top GUIs that cover part of application

Recommended Posts


In these day i'm boring example section board with my silly request.

Martin do a working example for my request.

Made GUI with holes that cover an application but make visible/clickable

only part of it:

#include <GUIConstantsEx.au3>
#include <windowsconstants.au3>
#include <staticconstants.au3>

#region - GUI Create
$gui = GUICreate("trans", 300, 400, -1, -1, BitOr($WS_POPUP,$WS_SIZEBOX), $WS_EX_LAYERED)



While GUIGetMsg() <> -3

; Function Name:   _API_SetLayeredWindowAttributes
; Description:: Sets Layered Window Attributes:) See MSDN for more informaion
; Parameter(s):   
;                 $hwnd - Handle of GUI to work on
;                 $i_transcolor - Transparent color
;                 $Transparency - Set Transparancy of GUI
;                 $isColorRef - If True, $i_transcolor is a COLORREF-Strucure, else an RGB-Color
; Requirement(s):  Layered Windows
; Return Value(s): Success: 1
;                 Error: 0
;                  @error: 1 to 3 - Error from DllCall
;                  @error: 4 - Function did not succeed - use
;                              _WinAPI_GetLastErrorMessage or _WinAPI_GetLastError to get more information
; Author(s):       Prog@ndy
Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)
Local Const $AC_SRC_ALPHA = 1
Local Const $ULW_ALPHA = 2
Local Const $LWA_ALPHA = 0x2
Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
        $i_transcolor = Hex(String($i_transcolor), 6)
        $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
        Case @error
            Return SetError(@error,0,0)
        Case $ret[0] = 0
            Return SetError(4,0,0)
        Case Else
            Return 1

Nice result, but to hard for me to take forward.

So i think another approach. Group of GUI that can be assembled togheter

and made hole where i want.

So 'admin' can compose final layout, cover an application, save windows postion,

to call when needed.

Why this ? because i want to give a commercial application to my users, but only few option disposable and button to use.

Made also simple script that made GUI that follow notepad and hide it to user:

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

dim $old_x = 0, $old_y = 0, $old_width = 0, $old_height = 0

while 1
    $size = WinGetPos("Senza nome - Blocco note")

Func _follow_me()

    if $old_x <> $size[0] or $old_y <> $size[1] or $old_width <> $size[2] or $old_height <> $size[3] then
;~  WinMove("Senza nome - Blocco note", "", $size[0], $size[0], $size[0], $size[0])
        $gui = GUICreate("Background", $size[2], $size[3] - 50, $size[0], $size[1] + 25)

        WinSetOnTop("Background", "", 1)

        $old_x = $size[0]
        $old_y = $size[1]
        $old_width = $size[2]
        $old_height = $size[3]

Imagine that this GUI is composed by more small gui resized ad hoc to cover part of application.


Long description, stupid request and boring reading.

Think is possible/usefull to script ?

thank you,


Edited by myspacee

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