Оказывается, что win32gui.GetForegroundWindow()
возвращает дескриптор окна, а не идентификатор процесса.
win32process.GetWindowThreadProcessId(hwnd)
можно использовать для получения идентификатора потока и идентификатора процесса из дескриптора.
import win32com.client
import win32gui
import win32process
hwnd = win32gui.GetForegroundWindow()
_, pid = win32process.GetWindowThreadProcessId(hwnd)
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate('Console2')
shell.SendKeys('{UP}{ENTER}')
shell.AppActivate(pid)