1

我应该写一个自动安装程序。只是一个您启动的程序,它应该自行完成安装向导,无需用户触摸任何东西。

我目前正在开发的程序称为 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 >”。

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

4

1 回答 1

3

我怀疑按钮的实际文本不仅包括加速键,"Weiter >"而且还包括一个&用于加速键的文本。尝试按一下Alt,看看是否出现了一个字母,其下有一个取消划线。如果是这样,则该字母以 . 为前缀&

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

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

于 2013-02-13T18:50:24.857 回答