I’ve tried the following, but focus isn’t returned to the program that had focus when the script was run:
import win32com.client
import win32gui
current = win32gui.GetForegroundWindow()
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate('Console2')
shell.SendKeys('{UP}{ENTER}')
shell.AppActivate(str(current))
It turns out that
win32gui.GetForegroundWindow()returns the window handle and not the process ID.win32process.GetWindowThreadProcessId(hwnd)can be used to get the thread ID and process ID from the handle.