2013-02-13 4 views
1

Я должен написать автоматический установщик. Просто программа, которую вы запускаете, и она должна пройти мастер установки самостоятельно, без какого-либо касания пользователя.Почему 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» (German for Next), он больше не работает. Он просто не находит его. Я думаю, что это как-то связано с тем, как написано «Weiter». Это не только единственное слово. Все выражение «Weiter>» Конечно, я положил все выражение в lpszWindow с «вокруг», как и с «Abbrechen». Но, как я уже сказал, он не находит его. Я пробовал все варианты написания, но это не работает.

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

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

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

+1

Попробуйте использовать spy ++ для получения правильного текста, затем используйте это, чтобы найти дескриптор – JosephH

ответ

3

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

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

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

+0

Здравствуйте, большое вам спасибо за ваши ответы. «Weiter>» действительно имеет перед собой («& Weiter>), поэтому теперь все работает нормально. Спасибо за ваше время. Nik Bougalis и JosephH! – user2069397

Смежные вопросы