최용일님을 상당히 귀찮게 해드리는군요.......^^
정말로 풀 소스를 delphi4에서 코딩해서 돌려봤는데요..
처음에 보내주신것은 delphi1,4 둘다 잘 됩니다...
하지만 그다음에 버튼 누르는 부분까지 추가한거 있죠?
MsgButton 누르거요..
그거 추가하면 역시 안되요...
제가 MessageBox 뜨면 멈처버린다는 말씀을 믿기 어려우신것처럼
저역시 용일님이 된다는것이 도저히.....믿기 힘들어요...
으아........딜레마에 빠져버렸나봐요....
안되요.....MessageBox 가 뜨면 진행을 멈처버리죠..
다시 정리하면...
FindForm_PRJ 에서 MsgForm_PRJ 의 MsgButton 을 누른후 MessageBox를 찾아 닫아주는거죠..
저의 현상은 MsgButton을 누르면 MessageBox 가 뜨는 순간 딱 멈처버리죠..
원래는 OnTimer 이벤트가 작동하는 부분이 진행되어야하는데..
않되요..흘흘........정말 미침....버근가? --;
안되시는 이유를 알것 같습니다. 이 SendMessage때문에 그런것 같군요. 메세지를
보내고 기다리니까 아마도 멈추는 것 같네요. SendMessage대신에 PostMessage를
사용해 보세요. 이건 메세지를 메세지큐에 넣기만하는 함수입니다.
소스는 약간 고쳤습니다. 버튼을 클릭하면 파일을 실행하고 버튼에 클릭이벤트를
보내 메세지창을 띄우고 3초간 기다린후 메세지박스를 닫도록하였습니다.
^^ 항상 즐코하세요.
unit FindForm_Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Forms, ExtCtrls, StdCtrls, Controls, Dialogs;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
Counter: Integer;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Path: string;
MsgForm, MsgBtn: HWnd;
begin
Path := ExtractFilePath(Application.ExeName);
WinExec(PChar(Path + 'MsgForm_Prj.exe'), SW_SHOWDEFAULT);
MsgForm := FindWindow('TMsgForm', 'MsgForm');
if MsgForm <> 0 then
begin
MsgBtn := FindWindowEx(MsgForm, 0, 'TButton', 'MsgButton');
if MsgBtn <> 0 then
begin
repeat
PostMessage(MsgBtn, WM_LBUTTONDOWN, 0, 0);
PostMessage(MsgBtn, WM_LBUTTONUP, 0, 0);
until FindWindow('#32770', 'MsgBox') = 0; // 메세지박스가 뜰때까지...
Counter := 0;
Timer1.Enabled := True;
end
else
ShowMessage('Error'); // 메세지 박스를 찾지 못하미...
end
else
ShowMessage('Error'); // 실행파일이 제대로 실행되지 않음...
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
DialogWnd, ButtonWnd: HWND;
begin
if Counter < 3 then
begin
Inc(Counter);
Label1.Caption := IntToStr(Counter);
Exit;
end;
// 메세지 박스 찾기...
DialogWnd := FindWindow('#32770', 'MsgBox');
if DialogWnd <> 0 then
begin
// 메세지 박스의 버튼 핸들을 찾기
ButtonWnd := FindWindowEx(DialogWnd, 0, 'Button', '확인');
// 버튼에 클릭메세지를 보내 메세지 박스를 닫기
if ButtonWnd <> 0 then
begin
PostMessage(ButtonWnd, WM_LBUTTONDOWN, 0, 0);
PostMessage(ButtonWnd, WM_LBUTTONUP, 0, 0);
end;
end;
TTimer(Sender).Enabled := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled := False;
end;
end.
안희준 wrote:
> 최용일님을 상당히 귀찮게 해드리는군요.......^^
>
> 정말로 풀 소스를 delphi4에서 코딩해서 돌려봤는데요..
>
> 처음에 보내주신것은 delphi1,4 둘다 잘 됩니다...
>
> 하지만 그다음에 버튼 누르는 부분까지 추가한거 있죠?
>
> MsgButton 누르거요..
>
> 그거 추가하면 역시 안되요...
>
> 제가 MessageBox 뜨면 멈처버린다는 말씀을 믿기 어려우신것처럼
> 저역시 용일님이 된다는것이 도저히.....믿기 힘들어요...
> 으아........딜레마에 빠져버렸나봐요....
>
> 안되요.....MessageBox 가 뜨면 진행을 멈처버리죠..
>
> 다시 정리하면...
> FindForm_PRJ 에서 MsgForm_PRJ 의 MsgButton 을 누른후 MessageBox를 찾아 닫아주는거죠..
>
> 저의 현상은 MsgButton을 누르면 MessageBox 가 뜨는 순간 딱 멈처버리죠..
> 원래는 OnTimer 이벤트가 작동하는 부분이 진행되어야하는데..
> 않되요..흘흘........정말 미침....버근가? --;
>
>