Почему FindWindowEx не находит все мои кнопки?

Я должен написать автоматический установщик. Просто программа, которую вы запускаете, и она должна пройти через мастер установки сама, без вмешательства пользователя.

Программа, над которой я сейчас работаю, называется Cygwin. И я хочу просто нажать кнопку «Далее» снова и снова, пока установка не будет завершена. Я знаю, что могу использовать VBS, и я знаю, что могу использовать C #, и это немного облегчит мне жизнь. Но у меня есть пример того, как это может работать для другой программы, и я пытаюсь адаптировать его для Cygwin в C ++.

    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».
Но, как я уже сказал, он не находит его. Я перепробовал все варианты написания, но это не работает.

Кто-нибудь знает, является ли «>» или «» (пробел) проблемой, и он не может прочитать это из-за этого. И если так, есть ли способ обойти это?
Или же можно получить идентификатор кнопки или чего-то подобного, что можно использовать для указания программе, где установить щелчок мышью.

Как я уже сказал, я знаю, что C ++ на самом деле не лучший язык для этой задачи, и, в конце концов, думаю, я перейду к чему-то другому. Но мне бы очень хотелось узнать, почему он работает для «Аббрехена» и почему он не работает для «Вайтера».

Так что, если у кого-то есть решение, я был бы очень благодарен. Спасибо!

1

Решение

Я подозреваю, что фактический текст кнопки не просто "Weiter >" но также включает в себя & там, для клавиши ускорения. Попробуйте нажать Alt и посмотрим, появится ли письмо с подпунктом под ним. Если это так, то к этому письму добавляется префикс &,

Это «решение» на самом деле довольно хрупкое и может легко сломаться. Например, что если пользователь настроил другой язык в своей системе?

Можно получить идентификатор кнопки, который вряд ли изменится. Но сначала вам нужно будет найти окно установщика, а затем перечислить его дочерние окна. Чтобы найти идентификатор кнопки, используйте Spy ++, как предложил JosephH в своем комментарии.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]