我正在使用SetWindowPos
函数实现自动化任务以显示窗口。我知道Windows提供了两种方式来执行此操作:带有超时值的SetWindowPos/ShowWindow
- 同步:
SetWindowPos
或ShowWindow
。 - 异步:
SetWindowPos
与SWP_ASYNCWINDOWPOS
或ShowWindowAsync
。
现在,我想要得到两全其美的效果:我希望能够同步显示窗口,因为我希望在函数返回时完成窗口。 但是我不希望呼叫挂起我的流程 - 如果时间太长,我希望能够中止呼叫。
现在,在寻找答案时,我能想出的唯一方法是使用单独的线程并使用SendMessageTimeout
,但即使如此,如果线程挂起,除了TerminateProcess
之外没有太多的工作可以结束,这不是一个干净的解决方案。
我也看过this answer,但据我了解,它没有替代原生WinAPI。
您是否从拥有与拥有窗口不同的输入队列的线程发出命令? –
@AdrianMcCarthy是的,还有一个不同的过程。目标是另一个我无法控制的程序。 – Paul
UI自动化(在您链接的其他答案中提到)存在于本机WinAPI程序中。这只是有点难以使用,因为你没有获得管理COM对象的所有运行时帮助。但是如果你想驱动另一个应用程序(特别是你没有写的应用程序),UI自动化通常是最好的方法。 –