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

时间:2013-02-13 18:11:10

标签: c++ installer hwnd 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”的方式有关。它不仅是唯一的词。整个表达是“Weiter>” 当然,我将整个表达式放在lpszWindow中,并在其周围加上“”,就像我对“Abbrechen”所做的一样。 但就像我说的那样,他没有找到它。我已经尝试过编写它的所有变体,但它不起作用。

有谁知道“>”或者“”(空格)是一个问题,因此无法阅读。如果是这样,有什么办法吗? 或者是否可以获取按钮的ID或类似的东西,可以用来告诉程序在哪里设置鼠标点击。

我知道,就像我说的那样,C ++并不是这项任务的最佳语言,最后我想我会改变别的东西。但我真的很想知道为什么它适用于“Abbrechen”以及为什么它不适用于“Weiter>”。

所以如果有人有解决方案,我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:3)

我怀疑该按钮的实际文本不仅仅是"Weiter >",还包含&,用于加速键。尝试按Alt,看看下面是否出现带有非核心字母的字母。如果是,那么该字母的前缀为&

这个“解决方案”实际上非常脆弱,很容易破解。例如,如果用户在其系统上配置了另一种语言,该怎么办?

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