procedure TForm1.Button1Click(Sender: TObject);
var
x,y: HWND;
begin
x:=findwindow('класс','текст');
y:=findwindowex(x,0,'класс','текст');
if (x<>0) and (y<>0)
SendMessage(y,WM_SETFOCUS,0,0)
else
Showmessage('cannot lock.');
end;
Почему не работает функция SetFocus?
procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;
Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?
Цитата:
Originally posted by mic2004
Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию SetFocus, используя дискриптор окна приложения, которому я хочу передать фокус. Вот пример кода:
procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;
Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?
Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию SetFocus, используя дискриптор окна приложения, которому я хочу передать фокус. Вот пример кода:
procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;
Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?
По-моему SetFocus работает только с дочерними окнами и только твоего приложения. Поиграй с SetWindowPos.
Цитата:
Originally posted by mic2004
Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию SetFocus, используя дискриптор окна приложения, которому я хочу передать фокус. Вот пример кода:
procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;
Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?
Из одного приложения нужно передать управление другому. Насколько я понимаю, необходимо использовать функцию SetFocus, используя дискриптор окна приложения, которому я хочу передать фокус. Вот пример кода:
procedure TMainForm.Button2Click(Sender: TObject);
var
ClassName, WindowName:AnsiString;
H:HWND;
begin
ClassName := 'TContactsForm';
WindowName := 'Contacts';
H := FindWindow(PChar(ClassName), PChar(WindowName));
if H <> 0 then begin
H1 := Windows.SetFocus(H);
end;
end;
Дискриптор корректный, а фокус этому окну не передается. В чем здесь дело?
SetActiveWindow(H) не пробовал?
ИМХО, для связи с чужими приложениями лучше использовать почту. :)
Окно, конечно, может и не показаться, но в таскбаре по-любому даст о себе знать.
Windows.SetForegroundWindow(H) передает фокус, только если окно открыто. если свернуто в значек, то можно использовать ShowWindow? она разворачивает окно и передает ему фокус. но только если окно уже открыто, то она не передает ему фокус. В общем разобрался я, всем спасибо!