Sign in to follow this  
Followers 0

Always on top GUIs that cover part of application

1 post in this topic

#1 ·  Posted (edited)

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  
Followers 0