안녕하세여...또 질문 ㅜ.ㅜ..
ShellExecute(handle, Pchar('open'), PChar('c:1.reg'), #0,
PChar('regfiledirectory'), sw_hide);
요걸 실행하믄여...
원래..레지 스트리 파일이니까...
메세지 박스 하나 떠서
예 , 아니오 버튼 나오거든여..
안보이는걸루 해놓았지만...
여기서 예를 눌를수 없을까요.?
예눌른다음 또 확인 메세지가 뜨는데 그것도.
확인 버튼 눌르고 싶은데...
좀 알려주세여...
한마디로내 어플 안에서 다른 실행파일을 실행 시켜서..
거기 나오는 메세지 박스에다가 예 한번 눌르고
확인 한번 눌루고...
가능 한가여.? ...
델파이는 불가능이란 어업당.?
좀 알려주세여 ~~~~~~~~~~~ *^___________________^*;
> 안녕하세여...또 질문 ㅜ.ㅜ..
> ShellExecute(handle, Pchar('open'), PChar('c:1.reg'), #0,
> PChar('regfiledirectory'), sw_hide);
> 요걸 실행하믄여...
> 원래..레지 스트리 파일이니까...
> 메세지 박스 하나 떠서
> 예 , 아니오 버튼 나오거든여..
> 안보이는걸루 해놓았지만...
> 여기서 예를 눌를수 없을까요.?
> 예눌른다음 또 확인 메세지가 뜨는데 그것도.
> 확인 버튼 눌르고 싶은데...
> 좀 알려주세여...
> 한마디로내 어플 안에서 다른 실행파일을 실행 시켜서..
> 거기 나오는 메세지 박스에다가 예 한번 눌르고
> 확인 한번 눌루고...
> 가능 한가여.? ...
> 델파이는 불가능이란 어업당.?
> 좀 알려주세여 ~~~~~~~~~~~ *^___________________^*;
>
>
>
그냥찾으면 되요....
윈사이트를 돌려서 찾으면 나와요....
디알로그 아니 다이얼로그는 #32770인가로 찾으면 되요.
그런데.... 윈사이트로 보면 클래스명이 #32770:Dialog라고 되어있지요.
이걸로 찾다가 안나와 EnumWindows를 돌려본 결과 알게되었지요....
첫번째것을 찾아서 없음 말고 있으면 예를 눌러주고 두번째것이 뜰때까지
기다리다가 너무기다리면 미쳐버리니깐 적당히 기다리다가 찾으며 확인버튼을
눌러주면 되요....
창을 찾으면 그때 포커스를 날려줘야더라구요. 아니면 두번째 창의 확인을 못 눌러주더라고요..
이거 전에 Daum에 돌아다니던 버튼어쩌고 하는 프로그램을 죽일려고 만들던거를 조금
고쳤지요.....
function delay(milisecond : integer): boolean;
var
TickCount : integer;
begin
result := false;
TickCount := GetTickCount;
while (GetTickCount - Tickcount) < milisecond do
Application.ProcessMessages;
result := true;
end;
//찾아서 ok눌러주는 부분
var
wnd : hwnd;
count : integer;
begin
//첫번째 창찾기
wnd := 0;
wnd := Findwindow('#32770', '레지스트리 편집기');
if wnd = 0 then
begin
messagedlg('창을 찾을수 없습니다.', mtinformation, [mbok], 0);
exit;
end;
//첫번째 창닫기
SetForeGroundWindow(wnd);
Wnd := Findwindowex(wnd, 0, 'Button', '예(&Y)');
Sendmessage(wnd, wm_LButtonDown, 0, 5 or (5 shl 16));
Sendmessage(wnd, wm_LButtonUp, 0, 5 or (5 shl 16));
//두번째 창찾기
count := 0;
wnd := 0;
wnd := Findwindow('#32770', '레지스트리 편집기');
while wnd = 0 do
begin
if count > 4 then
begin
messagedlg('창을 찾을수 없습니다.', mtinformation, [mbok], 0);
exit;
end;
Delay(100);
wnd := Findwindow('#32770', '레지스트리 편집기');
if wnd <> 0 then Break;
inc(count);
end;
//두번째 창닫기
SetForeGroundWindow(wnd);
Wnd := Findwindowex(wnd, 0, 'Button', '확인');
Sendmessage(wnd, wm_LButtonDown, 0, 5 or (5 shl 16));
Sendmessage(wnd, wm_LButtonUp, 0, 5 or (5 shl 16));
SetForeGroundWindow(Form1.Handle);
end;
아 잘못써서 다시쓰는 군요. sendmessage에서 shr이아니라 shl인데.......
하하 안고쳐도 되지만 그래도 깔끔하지 못해서....