Bluesmaster 5 Posted November 27, 2013 Hello Community, I want to create some boxes on my desktop. The boxes have to recognize mouse clicks so I use labels to represent the boxes border. The problem: If I make the window transparent it will no longer accept mouse clicks. This behavior only appears when I make the window a child of the desktop. expandcollapse popup; GUI $WS_POPUP = 0x80000000 $WS_EX_LAYERED = 0x00080000 $GUI_desktop_Child = GUICreate( "" , 500 , 200 , 500 , 500 , $WS_POPUP , $WS_EX_LAYERED ) GUISetBkColor( 0x00FF00 ) GUISetState() ; BOX GUICtrlCreateLabel( "" , 5 , 5 , 300 , 5 ) GUICtrlSetBkColor( -1 , 0xEA0000 ) GUICtrlCreateLabel( "" , 5 , 100 , 300 , 5 ) GUICtrlSetBkColor( -1 , 0xEA0000 ) GUICtrlCreateLabel( "" , 5 , 5 , 5 , 100 ) GUICtrlSetBkColor( -1 , 0xEA0000 ) GUICtrlCreateLabel( "" , 300 , 5 , 5 , 100 ) GUICtrlSetBkColor( -1 , 0xEA0000 ) ; MAKE CHILD OF DESKTOP & ALPHA MASK $hDeskWin=_WinGetDesktopHandle() DllCall("user32.dll", "int", "SetParent", "hwnd", $GUI_desktop_Child , "hwnd", $hDeskWin ) DllCall( "user32.dll" , "bool", "SetLayeredWindowAttributes", "hwnd", $GUI_desktop_Child, "dword", 0x00FF00 , "byte", 250, "dword", 0x03 ) ; ( has to be executed AFTER! making it childwindow ) HotKeySet( "{ESC}" , "_exit" ) Func _exit() Exit EndFunc While 1 Sleep(50) WEnd Func _WinGetDesktopHandle() Local $i,$hDeskWin,$hSHELLDLL_DefView,$hListView ; The traditional Windows Classname for the Desktop, not always so on newer O/S's $hDeskWin=WinGetHandle("[CLASS:Progman]") ; Parent->Child relationship: Desktop->SHELLDLL_DefView $hSHELLDLL_DefView=ControlGetHandle($hDeskWin,'','[CLASS:SHELLDLL_DefView; INSTANCE:1]') ; No luck with finding the Desktop and/or child? If $hDeskWin='' Or $hSHELLDLL_DefView='' Then ; Look through a list of WorkerW windows - one will be the Desktop on Windows 7+ O/S's $aWinList=WinList("[CLASS:WorkerW]") For $i=1 To $aWinList[0][0] $hSHELLDLL_DefView=ControlGetHandle($aWinList[$i][1],'','[CLASS:SHELLDLL_DefView; INSTANCE:1]') If $hSHELLDLL_DefView<>'' Then $hDeskWin=$aWinList[$i][1] ExitLoop EndIf Next EndIf ; Parent->Child relationship: Desktop->SHELDLL_DefView->SysListView32 $hListView=ControlGetHandle($hSHELLDLL_DefView,'','[CLASS:SysListView32; INSTANCE:1]') If $hListView='' Then Return SetError(-1,0,'') Return SetExtended($hListView,$hDeskWin) EndFunc BoxOnDesktop.au3 ( note, this will only work on windows 8 as there child windows accept the $WS_EX_LAYERED property ) How can I make the gui accept mouse clicks? My UDF: [topic='156155']_shellExecuteHidden[/topic] Share this post Link to post Share on other sites
FireFox 260 Posted November 29, 2013 (edited) Hi, Here you go : #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <WinAPI.au3> $hGUI = GUICreate("MyGUI", 50, 50, 50, 50, BitOR($WS_POPUP, $WS_CHILD), $WS_EX_TRANSPARENT, _WinAPI_GetDesktopWindow()) GUISetBkColor(0xFF0000) GUISetState(@SW_SHOW, $hGUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $GUI_EVENT_PRIMARYDOWN ConsoleWrite("primary down" & @CrLf) EndSwitch WEnd GUIDelete($hGUI) Edit: If you want to make it layered, then use the WinAPI function for it (_WinAPI_SetLayeredWindowAttributes) Br, FireFox. Edited November 29, 2013 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_UDFMy Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme makerMy Examples : Capture tool | IP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewerMy 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
Bluesmaster 5 Posted November 29, 2013 Hi Firefox, Thanks for your suggestion. Unfortunately your solution has some drawbacks. 1. its not really a child window of the desktop I meant ( the explorer window with the icons ) but a child of the "desktop" as root of the window tree 2. Due to this it as toplevel-window appears above other windows on creation and disappears on "toogleDesktop" I found a solution that was very complicated to figure out ( took me 2 days ). I will post it later. regards My UDF: [topic='156155']_shellExecuteHidden[/topic] Share this post Link to post Share on other sites
FireFox 260 Posted November 29, 2013 2. Due to this it as toplevel-window appears above other windows on creation_WinAPI_SetWindowPos($hGUI, $HWND_BOTTOM, 0, 0, 0, 0, BitOR($SWP_NOACTIVATE, $SWP_NOMOVE, $SWP_NOSIZE)) GUISetState(@SW_SHOWNOACTIVATE, $hGUI)and disappears on "toogleDesktop"This can not be overrided, but I would like to see your code anyway 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_UDFMy Projects : YouTube Multi-downloader | FTP Easy-UP | Lock'n | WinKill | AVICapture | Skype TM | Tap Maker | ShellNew | Scriptner | Const Replacer | FT_Pocket | Chrome theme makerMy Examples : Capture tool | IP Camera | Crosshair | Draw Captured Region | Picture Screensaver | Jscreenfix | Drivetemp | Picture viewerMy 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
Bluesmaster 5 Posted November 30, 2013 Well a snippet says more than a thousand words. Gui 1-3 demostrate some problems I had. Gui 4 fits my needs where magic effect of "winmove" is remarkable. expandcollapse popup#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <WinAPI.au3> ; GUI 1 - DISAPPEARS - ...on toogle Desktop $hGUI = GUICreate("MyGUI", 50, 50, 50, 50, BitOR( $WS_POPUP, $WS_CHILD ), $WS_EX_TRANSPARENT , _WinAPI_GetDesktopWindow() ) GUISetBkColor(0xFF0000) GUISetState(@SW_SHOW, $hGUI) ; GUI 2 - CLICKTROUGH - Cannot receive mouse clicks ;~ $WS_POPUP = 0x80000000 $hGUI2 = GUICreate( "" , 200 , 100 , 200 , 200 , $WS_POPUP , 0x00080000 ) ; $WS_EX_LAYERED = 0x00080000 GUISetBkColor( 0xff0000 ) DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI2 , "hwnd", _WinGetDesktopHandle() ) DllCall( "user32.dll" , "bool", "SetLayeredWindowAttributes", "hwnd", $hGUI2 , "dword", 0x00FF00 , "byte", 250, "dword", 0x03 ) ; ( has to be executed AFTER! making it childwindow ) GUISetState() ; GUI 2 - BLUR - Can receive mouse clicks but appears blur on non black background $hGUI3 = GUICreate( "" , 100 , 200 , 800 , 500 , $WS_POPUP ) GUISetBkColor( 0xff0000 ) DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI3 , "hwnd", _WinGetDesktopHandle() ) GUISetState() ; GUI 3 - GOOD - is not blurred and can receive mouse clicks $hGUI4 = GUICreate( "" , 200 , 100 , 200 , 200 , $WS_POPUP , 0x00080000 ) ; $WS_EX_LAYERED = 0x00080000 GUISetBkColor( 0xff0000 ) DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI4 , "hwnd", _WinGetDesktopHandle() ) DllCall( "user32.dll" , "bool", "SetLayeredWindowAttributes", "hwnd", $hGUI4, "dword", 0x00FF00 , "byte", 250, "dword", 0x03 ) ; ( has to be executed AFTER! making it childwindow ) WinMove( $hGUI4 , "" , 500 , 500 ) GUISetState() HotKeySet("{ESC}", "_Exit") Func _Exit() Exit EndFunc $i = 11 While 1 $i += 15 Sleep( 50 ) ;~ WinMove( $hGUI1 , "" , $i , $i ) WEnd Func _WinGetDesktopHandle() $aWinList=WinList("[CLASS:WorkerW]") For $i=1 To $aWinList[0][0] $hSHELLDLL_DefView=ControlGetHandle($aWinList[$i][1],'','[CLASS:SHELLDLL_DefView; INSTANCE:1]') If $hSHELLDLL_DefView<>'' Then $hDeskWin=$aWinList[$i][1] ExitLoop EndIf Next ; Parent->Child relationship: Desktop->SHELDLL_DefView->SysListView32 $hListView=ControlGetHandle($hSHELLDLL_DefView,'','[CLASS:SysListView32; INSTANCE:1]') Return SetExtended($hListView,$hDeskWin) EndFunc regards Bluesmaster My UDF: [topic='156155']_shellExecuteHidden[/topic] Share this post Link to post Share on other sites