我正在开发一个程序来同时控制少数相同类型的其他程序。
到目前为止,我使用 EnumWindows() 并收集我将要控制的相应窗口(程序)的句柄。在识别出一些键盘击键后,我遍历所有程序(可能有任意数量的程序打开),并通过使用 EnumChildWindows() 来同时向所有这些程序发布点击消息,以找到相应的窗口(按钮)基于哪个击键被按下,然后使用 PostMessage() 实际发送点击。
我控制的每个程序都有一个名为“加载设置”的按钮,单击该按钮会打开一个打开文件对话框。我想做的是首先使用 PostMessage() 单击“加载设置”(我已经成功做到了这一点,接下来是我正在尝试做的事情)。然后我想得到那个打开文件对话框窗口的句柄,用我已经确定的适当设置文件的路径填写文本字段,然后单击“打开”按钮完成任务并关闭打开窗口.
我的主要问题是找到那个打开的窗口。现在,我可以再次使用 EnumWindows 找到该窗口,但问题在于单击“加载设置”时,打开窗口不会立即打开。单击按钮后我可以睡觉,然后通过窗口枚举找到它,但这不切实际,因为窗口可能需要任何时间才能打开。
我已经使用 spy++ 来收集有关此窗口的一些信息,但据我所知,这些信息都没有足够的帮助。无论如何,这是我发现的:
- “打开”窗口是打开它的程序的上一个窗口。
- “打开”窗口的父窗口是打开它的程序。
- “打开”窗口的所有者是打开它的程序。
但是即使它在其窗口属性下被列为主程序的子程序,它也被列为与主程序相同的级别(它不像其他子窗口那样嵌套)。
我试过 FindWindowEx() 和 EnumChildWindows() 但都找不到打开窗口。
我认为应该有某种方法可以根据某个句柄获取前一个窗口的句柄。
一旦它工作了,那么我需要用适当的文件路径填充编辑(文本字段)窗口。