2013-02-13 4 views
1

자동 설치 프로그램을 작성해야합니다. 시작하는 프로그램 일 뿐이며 사용자가 아무 것도 건드리지 않고 설치 마법사를 통해 스스로 진행해야합니다.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는 단추의 이름입니다. Button "Abbrechen"(취소 용 독일어)에서 작동합니다. 그러나 그 이름을 "Weiter"(독일어는 Next)로 변경하면 더 이상 작동하지 않습니다. 그는 단지 그것을 발견하지 못한다. "Weiter"가 쓰여지는 방식과 관련이 있다고 생각합니다. 그것의 유일한 단어가 아닙니다. 전체 표현식은 "Weiter>"입니다. 물론 "Abbrechen"과 마찬가지로 lpszWindow에 전체 표현식을 ""둘러 쌉니다. 하지만 내가 말했듯이, 그는 그것을 발견하지 못합니다. 나는 그것을 작성하는 모든 변형을 시도했지만 작동하지 않습니다.

">"또는 ""(공백)이 문제인지 알기 때문에 누구든지 그 문제로 읽을 수 없습니다. 만약 그렇다면, 거기에 몇 가지 방법이 있습니까? 또는 마우스 클릭 설정 위치를 프로그램에 알리는 데 사용할 수있는 유사한 ID 또는 유사한 ID를 가져올 수 있습니까?

제가 말했듯이, C++은 실제로이 작업을위한 최상의 언어는 아니지만 결국에는 다른 것으로 바꿀 것입니다. 하지만 "Abbrechen"에서 왜 작동하는지, "Weiter>"에서는 효과가없는 이유를 알고 싶습니다.

누군가가 해결책을 가지고 있다면 매우 감사 할 것입니다. 감사!

+1

spy ++를 사용하여 정확한 텍스트를 얻은 다음 핸들을 찾기 위해 사용하십시오. – JosephH

답변

3

나는 버튼의 실제 텍스트 그냥 "Weiter >" 아니라고 생각뿐만 아니라 가속 키, 거기에 &이 포함되어 있습니다. Alt을 눌러 편지 아래에 기호가 표시되지 않는지 확인하십시오. 그럴 경우 해당 문자 앞에 &이라는 접두사가 붙습니다.

이 "솔루션"은 실제로 꽤 어설픈 것이기 때문에 쉽게 깨질 수 있습니다. 예를 들어 사용자가 시스템에 다른 언어를 구성한 경우 어떻게해야합니까?

변경할 가능성이없는 버튼의 ID를 가져올 수 있습니다. 하지만 먼저 설치 프로그램 창을 찾은 다음 자식 창을 열거해야합니다. 버튼의 ID를 찾으려면 JosephH가 Spy ++를 사용하는 것이 좋습니다.

+0

안녕하세요, 답변 해 주셔서 대단히 감사합니다. "Weiter>는 실제로"& Weiter> 앞에 있습니다. "이제 모든 것이 정상적으로 작동합니다. 시간 내 주셔서 감사합니다. Nik Bougalis and JosephH! – user2069397

관련 문제