Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Активировать чужое окно


Автор: AlanFree 18.1.2007, 12:00
Код

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure OnAct(var Msg:TMessage); message WM_ACTIVATEAPP;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnAct(var Msg:TMessage);
begin
if BOOL(Msg.WParam) then
 begin
 ShowMessage('!'+IntToStr(Msg.LParam));
 //в lParam находится идентификатор процесса, с которого пришел фокус 
 //(который только что был деактивирован)
 end;
end;


Мое приложение скрыто Form1.Visible:=False , при выполнении некоторых операций оно все равно отбирает фокус у другого приложения. 
С помощью кода который я привел я получаю индификатор окна у которого мое приложение забрало фокус. Как с помощью этого индификатора програмно активировать это чужое окно?

Автор: Sunvas 18.1.2007, 12:18
Самое простое - SetForegroundWindow

Автор: Yanis 18.1.2007, 13:09
AlanFree
Может легче не создавать форму вовсе  smile
Или же делать её не Visible := False, а Hide.

Автор: Sunvas 18.1.2007, 14:02
Цитата(Yanis @  18.1.2007,  13:09 Найти цитируемый пост)
Или же делать её не Visible := False, а Hide.

А это разве не одно и то же?
Код

procedure TControl.Hide;
begin
  Visible := False;
end;

Автор: Yanis 18.1.2007, 14:40
Цитата(Sunvas @  18.1.2007,  15:02 Найти цитируемый пост)
А это разве не одно и то же?

Да одно и тоже. Что-то я погорячился smile

Автор: AlanFree 22.1.2007, 10:01
Цитата(Sunvas @  18.1.2007,  12:18 Найти цитируемый пост)
Самое простое - SetForegroundWindow 

не помогает... есть другие варианты? то есть мне нужно активировать чужое окно, при условии что я знаю его хендл


M
Girder
В поиск...

Автор: RA 22.1.2007, 11:51
SetWindowPos( xx ,HWND_TOP, xx, xx, xx, xx ,SWP_FRAMECHANGED);

Автор: dumb 22.1.2007, 12:52
предлагаю не играть в "угадайку", а нормально описать задачу.

или читай сам - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows.asp

Автор: Romikgy 22.1.2007, 13:01
Цитата(Sunvas @  18.1.2007,  11:18 Найти цитируемый пост)
SetForegroundWindow 

поддерживаю, только перед всеми действиями (твоими , которые отбирают фокус) имхо надо заюзать
GetForegroundWindow

Автор: Sunvas 22.1.2007, 13:07
Цитата(Romikgy @  22.1.2007,  13:01 Найти цитируемый пост)
поддерживаю, только перед всеми действиями (твоими , которые отбирают фокус) имхо надо заюзать
GetForegroundWindow

Ну как найди хэндл - это не проблема. Есть множество вариантов.

Автор: AlanFree 22.1.2007, 15:09
RA,  пасибо вроде работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)