Windows - finding the window in focus and handling focus change events - python

I write a python program that should run when a certain window is open and in focus.
For this, I need 2 things:
I need to know how to find which window has focus currently.
I need to know if there is a focus change event.
Tried using win32api and win32gui with no success.
How can I do it?
Example to clerify - say I want to write "geronimo" every time I focus notepad.
I run the program (notepad closed, nothing happens)
I open notepad (it should write geronimo)
I change focus to chrome (nothing happens)
I change focus back to notepad (writes geronimo again)

This script tracks the focus of windows, it can be changed to suit the need.
https://gist.github.com/keturn/6695625

Related

Closing a file and come back to an especific window

I developed a GUI, which cointain 3 windows, to display some tutorials. It's working but when I open a file(tutorial) and finish reading it, I would like to close it and come back to the second Window, however the GUI returns to the first one. How can I fix it?
This is the sequence:
First Window
Second Window
Opened Tutorial
First Window

Python script to close a specific window when it opens

I am searching for a way to close a specific window of a program immediately after it opens. Specifically, I am using the BUFF addon for Overwolf and after every game I play, this annoying overlay window opens up and blocks part of my screen. To close it windows Alt+Tab'ing out, I need to wait 10 seconds (that means if I'm not willing to subscribe to BUFF premium), and Alt+Tab'ing out after every game is just as annoying.
Is there any way that I can run a Python script while I'm playing that closes this window every time it opens immediately? I'm thinking of something that continously searches for a window with a specific name or maybe something that listens for the event of a window opening and then checking its name/title. I don't even know if Python can access these processes, but I guess it's worth to just ask.
And before I need to edit the post, I'm using Windows 11.

Pywinauto find process window and focus it

My current situation is that I open a process, which opens in a random location (thats how this process works).
I have the process PID so I need to somehow focus this window, and move it to the center of my screen.
Im doing something wrong as I can't even set focus on that window... tried it with different apps and got the same result...
The way I select the window -
appl = pywinauto.application.Application()
appl.connect(process=824)
app_dialog = appl.top_window_()
app_dialog.Minimize()
app_dialog.Maximize()
##app_dialog.SetFocus() ##doesn't work aswell
##pywinauto.win32functions.SetForegroundWindow(app_dialog)## doesn't work
Thanks for reading :)
Can't say why it doesn't work with pywinauto...
Got it to work with win32gui as the answer here- Python Window Activation
long yet efficient ;)
Method app_dialog.set_focus() should work in pywinauto 0.6.2. If not, it might be a bug. Is your application publicly available somehow? I'd like to reproduce it on my side. Are you trying to activate a background window while you have modal dialog on top of it?
Second case is a wrong usage of SetForegroundWindow(...). It should give a handle, but you pass WindowSpecification object app_dialog. Right way is the following:
handle = app_dialog.wrapper_object().handle
pywinauto.win32functions.SetForegroundWindow(handle)

Sending an untypeable character to another window from Python program

I have a Python/pygI program which shows a window with buttons with various characters, primarily the ones that are not found on standard keyboard. (€æÜÄØá¿ etc)
And I have, say, Gedit open. I have made my program's window unfocusable, so the Gedit's window remains in focus when I press a button in my program's window.
My problem is: when I press a button with a character in my program's window, I want it to be automatically typed into Gedit's window. So it's some kind of an auxiliary on-screen keyboard with rare symbols.
My current method of doing it is via clipboard, but it's tedious because
it contaminates the clipboard
I have to Ctrl+V every time to put the symbol into Gedit.
Is there a way to put a symbol into an active window from Python program? Maybe I should use some Linux utilities via subprocessing? Maybe there is even a way to do it via means of Gtk? Or maybe I can manipulate the clipboard somehow so it would put a character there, automatically paste it to Gedit and put the original clipboard contents back?
EDIT1: I am using X window system in Ubuntu 14.04.

How to emulate mouse/keyboard events in a unfocused/minimized window?

I am trying to do some automation with Python, but I want to execute it and still being able to use my machine freely. So I am using PyWin32 to emulate some clicks and typing but it only works if I run the script while the window is open and focused.
There is a way to make my script only focus on a window, and still be able to click on that window without taking control over the mouse, even if the window is not focused (if it works when is minimized, is best!)?
i do not know the PyWin32 package but from a win32 api point of view the thing should be easy.
get a HWND of that window and post (PostMessage) the events you want to the window.
eg: WM_LBUTTONDOWN & WM_LBUTTONUP, WM_RBUTTONDOWN & WM_RBUTTONUP, WM_MOUSEMOVE...
look at the win32 help how to set the wParam & lParam data for the specific events.
i controlled diablo 3 this way for example ;)
Edit:
there is no need to be in focus or maximized for this
Edit Edit:
may be you should look after autoit, a widely used scrip language for window automation. I never used it but read the name very often in this context. it may also be usable from python.

Categories

Resources