CrewXp Posted September 26, 2013 Share Posted September 26, 2013 I used to know how to do this, but I took a 3 year break from autoit lol. Is it possible (without making an invisible ctrl overlaying my gui) to detect if my GUI is clicked on? I have it set that if I click it, my current application does not lose focus. It is just an overlay/toast. I made my gui using gdiplus and a transparent PNG. I tried using $GUI_EVENT_PRIMARYDOWN, but nothing happens when I press my mouse down on it. Link to comment Share on other sites More sharing options...
JohnOne Posted September 26, 2013 Share Posted September 26, 2013 Post an example of your GUI code for better help. Oh! and see if you can write a longer topic title please. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
UEZ Posted September 26, 2013 Share Posted September 26, 2013 You can create a picture control and send the PNG image to that control. GUIGetMsg() can check whether the pic control is clicked. Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
DatMCEyeBall Posted September 26, 2013 Share Posted September 26, 2013 Oh! and see if you can write a longer topic title please. Don't think there's a limit to that. "Just be fred, all we gotta do, just be fred." -Vocaliod "That is a Hadouken. A KAMEHAMEHA would have taken him 13 days and 54 episodes to form." - Roden Hoxha @tabhooked Clock made of cursors ♣ Desktop Widgets ♣ Water Simulation Link to comment Share on other sites More sharing options...
CrewXp Posted September 26, 2013 Author Share Posted September 26, 2013 (edited) Lol... argh. Okay. Sorry, it was 4am yesterday when I was trying to figure it out. Code: expandcollapse popupFunc Test() Msgbox(0,"","") EndFunc Func Loader($type,$x, $y) $loc="D:\Development\AutoIt\TestToast.png" _GDIPlus_Startup() $GUI = _GUICreate_Alpha("Look at the shiny", $loc, $x, $y) GuiSetOnEvent($GUI_EVENT_PRIMARYDOWN,"Test") $myGuiHandle = WinGetHandle("Look at the shiny") GLOBAL $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($myGuiHandle) GUISetState() $hwnd = GUICreate("ControlGUI", $toast_x,$toast_y, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $myGuiHandle) GUISetBkColor(0xABCDEF) ;Failed attempt to use dllcall to slide down and fade in as it slides. Shows a random weird blue box ;DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 270, "long", 0x00040004) ; $SLIDE IN FROM TOP ;DOESNT WORK!!!! #define AW_HOR_POSITIVE 0x00000001 #define AW_HOR_NEGATIVE 0x00000002 #define AW_VER_POSITIVE 0x00000004 #define AW_VER_NEGATIVE 0x00000008 #define AW_CENTER 0x00000010 #define AW_HIDE 0x00010000 #define AW_ACTIVATE 0x00020000 #define AW_SLIDE 0x00040000 #define AW_BLEND 0x00080000 If $type=1 Then GLOBAL $obj_e1 = GUICtrlCreateLabel('Elevator 1: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf If $type=2 Then GLOBAL $obj_e2 = GUICtrlCreateLabel('Elevator 2: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf If $type=3 Then GLOBAL $obj_e3 = GUICtrlCreateLabel('Elevator 3: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf If $type=4 Then GLOBAL $obj_m1 = GUICtrlCreateLabel('Main Entrance: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf _WinAPI_SetLayeredWindowAttributes($hwnd, 0xABCDEF, 255) ;Failed Attempt to manually slide the gui down from top. Moves, but doesnt move text with it. And Cant fade using this For $i=100 to 0 Step -1 WinMove($myGuiHandle, "", $x, $y-$i, $toast_x, $toast_y) If $i=100 Then GUISetState(@SW_SHOW,$myGuiHandle) Sleep(1) Next GUISetState() EndFunc Func _GUICreate_Alpha($sTitle, $sPath, $iX=-1, $iY=-1, $iOpacity=255) Local $hGUI, $hImage, $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend $hImage = _GDIPlus_ImageLoadFromFile($sPath) $width = _GDIPlus_ImageGetWidth($hImage) $height = _GDIPlus_ImageGetHeight($hImage) $hGUI = GUICreate($sTitle, $width, $height, $iX, $iY, $WS_POPUP, $WS_EX_LAYERED) $hScrDC = _WinAPI_GetDC(0) $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap) $tSize = DllStructCreate($tagSIZE) $pSize = DllStructGetPtr($tSize) DllStructSetData($tSize, "X", $width) DllStructSetData($tSize, "Y", $height) $tSource = DllStructCreate($tagPOINT) $pSource = DllStructGetPtr($tSource) $tBlend = DllStructCreate($tagBLENDFUNCTION) $pBlend = DllStructGetPtr($tBlend) DllStructSetData($tBlend, "Alpha", $iOpacity) DllStructSetData($tBlend, "Format", 1) _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, 2) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteObject($hBitmap) _WinAPI_DeleteObject($hImage) _WinAPI_DeleteDC($hMemDC) EndFunc ;==>_GUICreate_Alpha What I can't get: -Clicking on the GUI After it's setup make it call a function. -Having the gui/toast slide in from the top and fade in as it slides. Manually moving using WinMove only moves png, not text. Using the dllcall animates a random weird blue box. Edited September 26, 2013 by CrewXp Link to comment Share on other sites More sharing options...
trancexx Posted September 26, 2013 Share Posted September 26, 2013 Does that script work for you at all?I have troubles understanding what exactly you want. How's this:#include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #include "GIFAnimation.au3" Opt("GUICloseOnESC", 1); ESC to exit Global $sFile = InetRead("http://files.myopera.com/supergreatChandu8/albums/5466862/smiley-transparent.png"); @ProgramFilesDir & "\AutoIt3\Examples\GUI\Torus.png" $aGIFDimension = _GIF_GetDimension($sFile) $hGui = GUICreate("GIF Animation", $aGIFDimension[0], $aGIFDimension[1], -1, -1, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED)) GUISetBkColor(0xFFFFFF, $hGui) $hPic = _GUICtrlCreateGIF($sFile, "", 0, 0, $aGIFDimension[0], $aGIFDimension[1]) GUICtrlSetTip($hPic, "Aaaahh... ESC to Exit") GUICtrlSetStyle($hPic, Default, $GUI_WS_EX_PARENTDRAG) GUISetState() While 1 Switch GUIGetMsg() Case -3 Exit Case $hPic MsgBox(4096, "Click", "Aaah") EndSwitch WEnd...You can find GIFAnimation.au3 in examples forum. Don't let its name fool you, it can display any image, not only GIFs. Place it in the same folder as your script before you run it. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
CrewXp Posted September 26, 2013 Author Share Posted September 26, 2013 Thanks for the assist! Here is a 'working' copy of the code above. (includes and even test png). Your example uses gui get messages, I am using the gdiplus include, so I'm not sure how to make mine as yours functions. I tried using Func Test() Msgbox(0,"","") EndFunc ;Placed this after my gui was created GuiSetOnEvent($GUI_EVENT_PRIMARYDOWN,"Test") But it didn't do anything... Code: expandcollapse popup;GUI Stuff #include <GDIPlus.au3> #include <WindowsConstants.au3> #include <GuiConstantsEx.au3> HotKeySet('{esc}','_exit'); ALT+1 Show / Hode Gui to tray $toast_x=300 $toast_y=50 InetGet("http://dummyimage.com/300x50/000/fff",@ScriptDir&"\blank.png") Global $sFile = InetRead("http://dummyimage.com/300x50/000/fff"); @ProgramFilesDir & "\AutoIt3\Examples\GUI\Torus.png" Func Test() Msgbox(0,"","") EndFunc Func _exit() Exit EndFunc Func Loader($type,$x, $y) $loc=@ScriptDir&"\blank.png" _GDIPlus_Startup() $GUI = _GUICreate_Alpha("Look at the shiny", $loc, $x, $y) GuiSetOnEvent($GUI_EVENT_PRIMARYDOWN,"Test") $myGuiHandle = WinGetHandle("Look at the shiny") GLOBAL $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($myGuiHandle) GUISetState() $hwnd = GUICreate("ControlGUI", $toast_x,$toast_y, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $myGuiHandle) GUISetBkColor(0xABCDEF) ;Failed attempt to use dllcall to slide down and fade in as it slides. Shows a random weird blue box ;DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 270, "long", 0x00040004) ; $SLIDE IN FROM TOP ;DOESNT WORK!!!! #define AW_HOR_POSITIVE 0x00000001 #define AW_HOR_NEGATIVE 0x00000002 #define AW_VER_POSITIVE 0x00000004 #define AW_VER_NEGATIVE 0x00000008 #define AW_CENTER 0x00000010 #define AW_HIDE 0x00010000 #define AW_ACTIVATE 0x00020000 #define AW_SLIDE 0x00040000 #define AW_BLEND 0x00080000 If $type=1 Then GLOBAL $obj_e1 = GUICtrlCreateLabel('Elevator 1: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf If $type=2 Then GLOBAL $obj_e2 = GUICtrlCreateLabel('Elevator 2: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf If $type=3 Then GLOBAL $obj_e3 = GUICtrlCreateLabel('Elevator 3: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf If $type=4 Then GLOBAL $obj_m1 = GUICtrlCreateLabel('Main Entrance: Uninitialized', 35, 19, 150, 25) GUICtrlSetColor(-1, 0xFFFFFF) EndIf _WinAPI_SetLayeredWindowAttributes($hwnd, 0xABCDEF, 255) ;Failed Attempt to manually slide the gui down from top. Moves, but doesnt move text with it. And Cant fade using this For $i=100 to 0 Step -1 WinMove($myGuiHandle, "", $x, $y-$i, $toast_x, $toast_y) If $i=100 Then GUISetState(@SW_SHOW,$myGuiHandle) Sleep(1) Next GUISetState(@SW_SHOW,$hwnd) EndFunc Func _GUICreate_Alpha($sTitle, $sPath, $iX=-1, $iY=-1, $iOpacity=255) Local $hGUI, $hImage, $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend $hImage = _GDIPlus_ImageLoadFromFile($sPath) $width = _GDIPlus_ImageGetWidth($hImage) $height = _GDIPlus_ImageGetHeight($hImage) $hGUI = GUICreate($sTitle, $width, $height, $iX, $iY, $WS_POPUP, $WS_EX_LAYERED) $hScrDC = _WinAPI_GetDC(0) $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap) $tSize = DllStructCreate($tagSIZE) $pSize = DllStructGetPtr($tSize) DllStructSetData($tSize, "X", $width) DllStructSetData($tSize, "Y", $height) $tSource = DllStructCreate($tagPOINT) $pSource = DllStructGetPtr($tSource) $tBlend = DllStructCreate($tagBLENDFUNCTION) $pBlend = DllStructGetPtr($tBlend) DllStructSetData($tBlend, "Alpha", $iOpacity) DllStructSetData($tBlend, "Format", 1) _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, 2) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteObject($hBitmap) _WinAPI_DeleteObject($hImage) _WinAPI_DeleteDC($hMemDC) EndFunc ;==>_GUICreate_Alpha Loader(1,0,0) While 1 Sleep(1000) WEnd Link to comment Share on other sites More sharing options...
trancexx Posted September 27, 2013 Share Posted September 27, 2013 You want click-through second window. To have that you need to add another extended style: $hwnd = GUICreate("ControlGUI", $toast_x,$toast_y, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD, $WS_EX_TRANSPARENT), $myGuiHandle) Another thing is that in on-event mode you have to have: Opt("GUIOnEventMode", 1) ...somewhere at the top of your script. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now