【发布时间】:2015-07-10 20:15:17
【问题描述】:
我正在使用SetWindowPos 函数来执行自动化任务以显示一个窗口。我知道 Windows 提供了两种方法来做到这一点:
- 同步:
SetWindowPos或ShowWindow。 - 异步:
SetWindowPos与SWP_ASYNCWINDOWPOS或ShowWindowAsync。
现在,我想要两全其美:我希望能够同步显示窗口,因为我希望它在函数返回时完成。 但是我不希望调用挂起我的进程 - 如果需要太长时间,我希望能够中止调用。
现在,在寻找答案时,我唯一能想到的就是使用单独的线程并使用SendMessageTimeout,但即便如此,如果线程挂起,我也无能为力,除了TerminateProcess,这不是一个干净的解决方案。
我也见过this answer,但据我了解,它没有原生WinAPI的替代品。
【问题讨论】:
-
您是否从一个线程发出命令,该线程的输入队列与拥有窗口的线程不同?
-
@AdrianMcCarthy 是的,还有一个不同的过程。目标是另一个我无法控制的程序。
-
UI 自动化(在您链接到的其他答案中提到)存在于本机 WinAPI 程序中。它只是有点难以使用,因为您在管理 COM 对象时没有获得所有运行时帮助。但是,如果您尝试驱动另一个应用程序(尤其是您未编写的应用程序),UI 自动化通常是最好的选择。
标签: c windows multithreading winapi