님의 말씀을 듣고 부모-자식의 관계를 통해 해결을 해보아도 되지 않네요. 윈도우가 이상한가? 다른 윈도우에서는 바로바로 버튼을 찾아서 그 버튼에 클릭효과를 날려주는데 왜 이것만 이런지 모르겠네요.
좀 귀찮으시더라도 첨부파일을 다운로드해서 봐주시면 감사하겠습니다.
죄송합니다.
제가 테스트를 하기 위해서 만든 소스는 아래와 같습니다.
procedure TForm1.Button2Click(Sender: TObject);
var
s1, s2, s3, s4, s5, s6 : String;
AlHandle1, AlHandle2, AlHandle3 : THandle;
begin
s1 := Edit1.Text;
s2 := Edit2.Text;
s3 := Edit3.Text;
s4 := Edit4.Text;
s5 := Edit5.Text;
s6 := Edit6.Text;
AlHandle1 := FindWindow(PChar(s1), PChar(s2));
if AlHandle1 <> 0 then ShowMessage('창을 찾았습니다.')
else ShowMessage('창을 찾지 못했습니다.');
AlHandle2 := FindWindowEx(AlHandle1, 0, PChar(s3), PChar(s4));
if AlHandle2 <> 0 Then ShowMessage('핸들값이 존재합니다.')
else ShowMessage('핸들값이 존재하지 않습니다.');
AlHandle3 := FindWindowEx(AlHandle1, AlHandle2, PChar(s5), PChar(s6));
if AlHandle3 <> 0 then ShowMessage('핸들값이 존재합니다.')
else ShowMessage('핸들값이 존재하지 않습니다.');
end;
첨부된 그림 '윈도우 핸들'에서 보시면 '설치라는 창을 찾아냅니다. 소스에서는 S1에는 클래스를 s2에는 텍스트를 입력합니다. 이렇게 하면 AlHandle1의 값이 생성되어서 '창을 찾았습니다'라는 메세지가 나옵니다.
첨부된 그림 'static 화면'에서 보시면 클래스가 'static이라는 것이 보입니다.
그래서 s3에는 클래스를 s4에는 아무런 값을 입력하지 않으면 '핸들값이 존재합니다'라는 메세지가 나옵니다.
첨부된 그림 '버튼에 관한 핸들'을 보시면 클래스가 'button', 텍스트가 '아니오, 컴퓨터를 나중에 다시 시작하겠습니다.'라고 나타나요. 그래서 s5에는 클래스를 s6에는 텍스트를 입력하면 버튼을 찾을 수 있다고 생각했져.. 하지만.. 실패했네요.
근데 정말 이상한 현상의 첨부된 그림파일중 '버튼을 찾는 화면'이라고 있져?
그것은 중간의 Static을 찾지 않고 그냥 윈도우를 찾고 버튼을 찾아면 찾아진다는 거져... 근데 유독 '설치'라는 윈도우 하나만 속을 썩이네요.
도데체 뭐가 잘못된 건지.. 참네... 어제부터 계속 이것만 붙잡고 싸우고 있네요.
지금은 생각해 낸 것이 그냥 화살표 아래 버튼을 누르는 메세지를 날려 포커스를 옮겨보자 생각해서 SendMessage(ALHandle2,WM_KEYDOWN,0,$10001);으로 해보았지만 꿈쩍도 안하고 SendMessage(ALHandle2,VK_DOWN,0,$10001);으로 해보았지만 결과는 역시 마찬가지네요.
버튼을 클릭할때 SendMessage(ALHandle2,WM_LBUTTONDOWN,0,$10001);
SendMessage(ALHandle2,WM_LBUTTONUP,0,$10001);
이렇게 하면 되는 것처럼 생각하고 해보았는데... 제가 바버같은 생각을 하고 있는 거져...ㅠ.ㅠ
좀 도와 주세요.
부탁드리겠습니다.
올려주신 자료가지고는 부모-자식관계를 알 수가 없습니다.
올려주신 화면에는 자신의 핸들만 나오고 부모의 핸들은 아무리 봐도 없군요...
제가 원했던건 첨부파일과 같은 그림입니다.
제 생각엔 첨부된 파일의 예처럼 그 버튼이라는게 메인윈도우(그림에서 0002009A)의 자식이 아니라 그림의 ComboBoxEx32(0001000E4)처럼 중간에 다른 윈도우가 존재할거 같네요... 이런식이라면 ComboBoxEx32는 메인윈도우의 자식이 아니기 때문에 메인윈도우핸들로 FindWindowEx가지고 아무리 찾아도 나타나지 않습니다.
뭐 정 안되시면 공개가능하시다면 제 메일로 그 인스톨프로그램을 보내주세요...
^^ 항상 즐코하세요...