我正在尝试遵循这个答案 https://stackoverflow.com/a/11901591/5510469我已经到了 a 应该打电话的地步
GetGUIThreadInfo()
但我找不到pywin32 文档 http://timgolden.me.uk/pywin32-docs/contents.html我在用。
到目前为止我所做的是
import win32api
import win32gui
import win32process
test1 = win32gui.FindWindowEx(0, 0, 0, "notepad")
(test1tid, test1pid) = win32process.GetWindowThreadProcessId(test1)
test1hwndFocus = win32process.GetGUIThreadInfo(test1tid)
但最后一行完全是编造的,因为我找不到调用该函数的正确方法。
Update1:
认为我取得了一些进展,但现在当我期望一些 hwnd 时,我的结构只返回 0...所以也许我的结构没有被写入,我认为这可能是因为我的结构中的类型,但我如何找到正确的类型?
import win32api
import win32gui
import win32process
import ctypes
class RECT(ctypes.Structure):
_fields_ = [
("left", ctypes.c_ulong),
("top", ctypes.c_ulong),
("right", ctypes.c_ulong),
("bottom", ctypes.c_ulong)
]
class GUITHREADINFO(ctypes.Structure):
_fields_ = [
("cbSize", ctypes.c_ulong),
("flags", ctypes.c_ulong),
("hwndActive", ctypes.c_ulong),
("hwndFocus", ctypes.c_ulong),
("hwndCapture", ctypes.c_ulong),
("hwndMenuOwner", ctypes.c_ulong),
("hwndMoveSize", ctypes.c_ulong),
("hwndCaret", ctypes.c_ulong),
("rcCaret", RECT)
]
guiThreadInfoStruct = GUITHREADINFO()
ctypes.sizeof(gtitest)
test1 = win32gui.FindWindowEx(0, 0, 0, "notepad")
(test1tid, test1pid) = win32process.GetWindowThreadProcessId(test1)
ctypes.windll.user32.GetGUIThreadInfo(test1tid, guiThreadInfoStruct)
print (guiThreadInfoStruct.hwndFocus)
Update2:
我找到了类型here https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-guithreadinfo
update3:
如果有人想看看我用这个做什么,那就去看看here https://github.com/sth0r/pyboxer-keystroke-broadcaster