Sign in to follow this  
Followers 0
psynegy

Create GUI without taking focus...

5 posts in this topic

I'm working on a notification script, but I don't like that every time a notification pops up it takes the computers focus. Any ideas how to make a GUI that exists only as a notification (always on top, but no focus)

Share this post


Link to post
Share on other sites



I'm working on a notification script, but I don't like that every time a notification pops up it takes the computers focus. Any ideas how to make a GUI that exists only as a notification (always on top, but no focus)

Try this.

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

$hWnd = DllCall('user32.dll', 'hwnd', 'GetForegroundWindow')
GUICreate('', 400, 200, -1, -1, BitOR($WS_POPUP, $WS_OVERLAPPEDWINDOW), $WS_EX_TOPMOST)
GUISetState()
DllCall('user32.dll', 'hwnd', 'SetForegroundWindow', 'hwnd', $hWnd[0])

do
    Sleep(10)
until GUIGetMsg() = $GUI_EVENT_CLOSE

Share this post


Link to post
Share on other sites

Try this.

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

$hWnd = DllCall('user32.dll', 'hwnd', 'GetForegroundWindow')
GUICreate('', 400, 200, -1, -1, BitOR($WS_POPUP, $WS_OVERLAPPEDWINDOW), $WS_EX_TOPMOST)
GUISetState()
DllCall('user32.dll', 'hwnd', 'SetForegroundWindow', 'hwnd', $hWnd[0])

do
    Sleep(10)
until GUIGetMsg() = $GUI_EVENT_CLOSE
I wish more devs thought like this, focus stealing is the biggest pain in the @rse

I added a sleep(1000) st the start so I could activate something else before it kicked in, works lovely :)

How many times have I hit enter at the end of my sentence to then wonder why my pc is rebooting or some other such nonsense!

Share this post


Link to post
Share on other sites

This is better.

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

$Form = GUICreate('', 400, 200, -1, -1, BitOR($WS_POPUP, $WS_OVERLAPPEDWINDOW), $WS_EX_TOPMOST)
_WinAPI_ShowWindow($Form, @SW_SHOWNOACTIVATE)

do
    Sleep(10)
until GUIGetMsg() = $GUI_EVENT_CLOSE

Share this post


Link to post
Share on other sites

This is better.

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

$Form = GUICreate('', 400, 200, -1, -1, BitOR($WS_POPUP, $WS_OVERLAPPEDWINDOW), $WS_EX_TOPMOST)
_WinAPI_ShowWindow($Form, @SW_SHOWNOACTIVATE)

do
    Sleep(10)
until GUIGetMsg() = $GUI_EVENT_CLOSE
Thanks very much! But there is an even easier way, without having to use the WinApi just GUISetState(@SW_SHOWNOACTIVATE)

Thanks again for your help!

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