我正在尝试创建一个窗口,然后获取所创建窗口的hwnd。在
目前,我调用subprocess.run("run.exe")
来创建窗口,然后继续调用wg.GetForegroundWindow()
来获取前景窗口的hwnd,这应该是新创建的窗口。然而,这并不能很好地工作,因为程序必须在被检测为前景之前完成打开,并且用户可以同时改变焦点。在
有没有更一致的方法来获得hwnd?在
编辑: 以下是我在以下评论的帮助下所做的:
def create_window():
user32 = ctypes.windll.user32
ole32 = ctypes.windll.ole32
EVENT_OBJECT_CREATE = 0x8000
def callback(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime):
if is_real_window(hwnd):
print(get_text(hwnd), "HOOKED")
user32.UnhookWinEvent(hWinEventHook)
return hwnd
WinEventProcType = ctypes.WINFUNCTYPE(
None,
ctypes.wintypes.HANDLE,
ctypes.wintypes.DWORD,
ctypes.wintypes.HWND,
ctypes.wintypes.LONG,
ctypes.wintypes.LONG,
ctypes.wintypes.DWORD,
ctypes.wintypes.DWORD
)
WinEventProc = WinEventProcType(callback)
user32.SetWinEventHook.restype = ctypes.wintypes.HANDLE
hook = user32.SetWinEventHook(
EVENT_OBJECT_CREATE,
EVENT_OBJECT_CREATE,
0,
WinEventProc,
0,
0,
0
)
if hook == 0:
print('SetWinEventHook failed')
sys.exit(1)
msg = ctypes.wintypes.MSG()
x = subprocess.Popen("C:\\cygwin64\\bin\\mintty.exe")
m = user32.GetMessageW(ctypes.byref(msg), 0, 0, 0)
然而,这面临两个问题。第一,虽然我可以在回调函数中访问hwnd,但似乎没有办法让create_window返回这个值。其次,GetMessage窗口继续运行,即使在调用UnhookWinEvent之后也是如此。在
我能做些什么来修理这些?在
目前没有回答
相关问题 更多 >
编程相关推荐