function TitleToWnd( TitleText: String ): HWND;
var
i: Integer;
C: array[0..255] of Char;
begin
Result := 0;
for i:= 0 to 32767 do
begin
GetWindowText( i, C, SizeOf( C ) );
if StrPas( C ) = TitleText then
begin
Result := i;
Break;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Path : string;
MsgBtn : HWND;
begin
Path := ExtractFilePath(Application.ExeName);
WinExec(........................)
MsgBtn := TiTleToWnd('MsgButton');
SendMessage(MsgBtn, WM_LBUTTONDOWN, 0, 0);
SendMessage(MsgBtn, WM_LBUTTONUP, 0, 0);
end;
저는 않되는데..이상타.....--;
타이머가 아니라 버튼에서 구현을 하셨네요... 이 SendMessage라는 함수가 100% 완전히
믿을 수 있는 함수가 아닙니다. 특히 버튼 클릭처럼 여러개의 메세지를 보내는 경우,
메세지를 보내 는 중간에 트래픽이 있다면 제때에 처리를 못하게 되는 경우도 생깁니
다. 그 때문에타이머를 썼던거구요. 버튼의 클릭이벤트에서 구현을 하실려면 제대로
메세지가 전달 될때까지 계속해서 메세지를 보내야합니다.
procedure TForm1.Button1Click(Sender: TObject);
...
begin
...
MsgBtn := TiTleToWnd('MsgButton');
repeat
SendMessage(MsgBtn, WM_LBUTTONDOWN, 0, 0);
SendMessage(MsgBtn, WM_LBUTTONUP, 0, 0);
until FindWindow('#32770', 'MsgBox') = 0; // 메세지박스가 뜰때까지...
end;
델파이 1.0은 FindWindowEx함수가 없는가 보군요. 루프를 이용해서 윈도우 핸들을
찾는 새로운 방법을 알게 되었습니다. 아래와 같이 코딩하시면 델파이 1.0에서도
윈도우 API함수인 FindWindow, FindWindowEx함수를 사용하실 수 있습니다.
interface
function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;
function FindWindowEx(Parent, Child: HWND; ClassName, WindowName: PChar): HWND; stdcall;
implementation
function FindWindow; external 'user32.dll' name 'FindWindowA';
function FindWindowEx; external 'user32.dll' name 'FindWindowExA';
end.
^^ 항상 즐코하세요.
안희준 wrote:
>
>
> function TitleToWnd( TitleText: String ): HWND;
> var
> i: Integer;
> C: array[0..255] of Char;
> begin
> Result := 0;
> for i:= 0 to 32767 do
> begin
> GetWindowText( i, C, SizeOf( C ) );
> if StrPas( C ) = TitleText then
> begin
> Result := i;
> Break;
> end;
> end;
> end;
>
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> Path : string;
> MsgBtn : HWND;
> begin
> Path := ExtractFilePath(Application.ExeName);
> WinExec(........................)
>
> MsgBtn := TiTleToWnd('MsgButton');
> SendMessage(MsgBtn, WM_LBUTTONDOWN, 0, 0);
> SendMessage(MsgBtn, WM_LBUTTONUP, 0, 0);
> end;
>
> 저는 않되는데..이상타.....--;
>
>
>