Почему 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 в своем комментарии.

Другие вопросы по тегам