2

我尝试了以下方法,但是在运行脚本时焦点没有返回到具有焦点的程序:

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

2 回答 2

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)
于 2011-11-11T14:38:21.927 回答
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

于 2020-04-24T18:58:40.623 回答