繁体   English   中英

给出父窗口处理Open窗口的最有效方法?

[英]Most efficient way to get the handle of an Open window given its parent?

我正在开发一个程序来同时控制一些相同类型的其他程序。

到目前为止,我使用EnumWindows()并收集我将要控制的相应窗口(程序)的句柄。 在识别出一些键盘击键后,我遍历所有程序(可能有任意数量的程序打开)并通过使用EnumChildWindows()找到适当的窗口(按钮)来同时发布所有这些程序的点击消息。按下按键,然后使用PostMessage()实际发送点击。

我正在控制的每个程序都有一个名为“加载设置”的按钮,单击该按钮时会打开一个打开文件对话框。 我想要做的是首先使用PostMessage()点击“加载设置”(我已经成功地做到了这一点,接下来是我正在尝试做的事情)。 然后我想获取该打开文件对话框窗口的句柄,在文本字段中填入我已经确定的相应设置文件的路径,然后单击“打开”按钮完成任务并关闭“打开”窗口。

我的主要问题是找到Open window。 现在,我可以再次使用EnumWindows找到该窗口,但问题是在单击“加载设置”时,打开窗口无法立即打开。 单击按钮后我可以睡觉,然后通过窗口查找它,但这不实用,因为窗口可能需要花费任何时间才能打开。

我已经使用spy ++来收集有关这个窗口的一些信息,但据我所知,这些都没有帮助。 无论如何,这是我发现的:

  • “打开”窗口是打开它的程序的上一个窗口。
  • 窗口“打开”的父级是从中打开的程序。
  • 窗口“打开”的所有者是它打开的程序。

但即使它在其窗口属性下列为主程序的子代,它也与主程序列在同一级别(它不像其他子窗口那样嵌套)。

我尝试过FindWindowEx()和EnumChildWindows(),但都找不到Open窗口。

我认为应该有一些方法,基于一些句柄,获得前一个窗口的句柄。

一旦它工作,那么我需要用适当的文件路径填充编辑(文本字段)窗口。

如果你的目标是自动化UI动作(例如测试),UIA就是你想要的。 UIA公开了整个UIA树,其中包含机器上所有活动的应用程序。

因此,您将看到的是一个根节点,每个应用程序都有一个子节点。 每个节点都应代表该应用程序的顶级窗口。 任何更多的孩子都依赖于应用程序本身。

UIA概述中查看更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM