使用win32com.client的AppActivate将焦点设置为基于ID的窗口

时间:2011-11-11 14:20:41

标签: python win32com

我已尝试过以下操作,但焦点不会返回到运行脚本时具有焦点的程序:

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))

2 个答案:

答案 0 :(得分:3)

事实证明win32gui.GetForegroundWindow()返回窗口句柄而不是进程ID。

win32process.GetWindowThreadProcessId(hwnd)可用于从句柄中获取线程ID和进程ID。

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)

答案 1 :(得分:0)

没有足够的评论对此内容发表评论

除了Acorn的答案(很久以前)之外,您现在还可以使用SetFocus(handle)。

import win32com.client
import win32gui

hwnd = win32gui.GetForegroundWindow()

shell = win32com.client.Dispatch("WScript.Shell")

shell.AppActivate('Console2')
shell.SendKeys('{UP}{ENTER}')

win32gui.SetForegroundWindow(hwnd)

来源:http://timgolden.me.uk/pywin32-docs/win32gui__SetFocus_meth.html