为什么 FindWindowEx 找不到我所有的按钮?



我应该编写一个自动安装程序。你只需要启动一个程序,它就可以自己完成安装向导,而用户不会触碰任何东西。

我现在正在做的节目叫做Cygwin。我想做的就是反复点击"下一步"按钮,直到安装完成。我知道我可以使用VBS,我知道我也可以使用C#,这会让我的生活变得更轻松。但我有一个例子,说明它如何适用于另一个程序,我正在努力将其改编为C++中的Cygwin。

    HWND WINAPI FindWindowEx(
      _In_opt_  HWND hwndParent,
      _In_opt_  HWND hwndChildAfter,
      _In_opt_  LPCTSTR lpszClass,
      _In_opt_  LPCTSTR lpszWindow
      );

这是我用来查找按钮的功能,下一步应该点击它。我在hwndParent中有程序窗口,这很好。hwndChildAfter和lpszClass为"NULL",lpszWindow为按钮的名称。这适用于按钮"Abbrechen"(德语中"取消"的意思)。但当我把这个名字改成"Weiter"(德语中Next的意思)时,它就不起作用了。他就是找不到。我认为这与《维特》的写作方式有关。这不仅仅是一个词。整个表达式是"Weiter>"当然,我把整个表达式放在lpszWindow中,周围有",就像我对"Abbrechen"所做的那样。但正如我所说,他找不到。我试过写它的所有变体,但都不起作用。

有人知道">"或"(空格)是否有问题,因此无法阅读吗。如果是这样的话,有办法绕过它吗?或者,是否可以获得按钮的ID或类似信息,用于告诉程序在哪里设置鼠标点击。

正如我所说,我知道C++并不是完成这项任务的最佳语言,最终我想我会换成其他语言。但我真的很想知道为什么它适用于"Abbrechen",为什么它不适用于"Weiter>"。

因此,如果有人有解决方案,我将不胜感激。谢谢

我怀疑按钮的实际文本不仅是"Weiter >",而且其中还包括用于快捷键的&。试着按Alt,看看一个字母下面是否有一个不需要的单词。如果有,那么这个字母的前缀是&

这个"解决方案"实际上相当脆弱,而且很容易被打破。例如,如果用户在其系统上配置了另一种语言,该怎么办?

可以获取按钮的ID,但该ID不太可能更改。但您必须首先找到安装程序窗口,然后枚举其子窗口。要找到按钮的ID,请按照JosephH在评论中的建议使用Spy++。

最新更新