Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.28;
Скачать: CL | DM;

Вниз

->>> Как сделать активным процесс, зная его хэндл.   Найти похожие ветки 

 
Metallica   (2002-08-21 13:17) [0]

Как сделать активным процесс, зная его хэндл.


 
Ученик ©   (2002-08-21 13:21) [1]

А что значит активным ?


 
Metallica   (2002-08-21 13:28) [2]

Ученик © (21.08.02 13:21)
> А что значит активным ?

1. Установить фокус на данный процесс (приложение).
Если это непонятно, то объясняю еще...
2. Вывести приложение на передний план.


 
Ученик ©   (2002-08-21 13:48) [3]

Не совсем по Handle, но идентификатор, наверно, известен

{ Project JEDI Code Library (JCL)}

function IsMainAppWindow(Wnd: HWND): Boolean;
var
ParentWnd: HWND;
ExStyle: DWORD;
begin
if IsWindowVisible(Wnd) then
begin
ParentWnd := GetWindowLong(Wnd, GWL_HWNDPARENT);
ExStyle := GetWindowLong(Wnd, GWL_EXSTYLE);
Result := ((ParentWnd = 0) or (ParentWnd = GetDesktopWindow)) and
((ExStyle and WS_EX_TOOLWINDOW = 0) or (ExStyle and WS_EX_APPWINDOW <> 0));
end
else
Result := False;
end;

function GetMainAppWndFromPid(PID: DWORD): HWND;
type
PSearch = ^TSearch;
TSearch = record
PID: DWORD;
Wnd: HWND;
end;
var
SearchRec: TSearch;

function EnumWindowsProc(Wnd: HWND; Res: PSearch): Boolean; stdcall;
var
WindowPid: DWORD;
begin
WindowPid := 0;
GetWindowThreadProcessId(Wnd, @WindowPid);
if (WindowPid = Res^.PID) and IsMainAppWindow(Wnd) then
begin
Res^.Wnd := Wnd;
Result := False;
end
else
Result := True;
end;

begin
SearchRec.PID := PID;
SearchRec.Wnd := 0;
EnumWindows(@EnumWindowsProc, Integer(@SearchRec));
Result := SearchRec.Wnd;
end;


procedure TForm1.Button5Click(Sender: TObject);
begin
SetForegroundWindow(GetMainAppWndFromPid(dwProcessID))
end;


 
sudiv ©   (2002-08-21 14:17) [4]

Ого.

Может проще:
ShowWindow(Handle, SW_RESTORE);
SetForegroundWindow(Handle);

Или даже просто
ShowWindow(Handle, SW_RESTORE);


 
Ученик ©   (2002-08-21 14:20) [5]

>sudiv © (21.08.02 14:17)
На Handle процесса ?


 
sudiv ©   (2002-08-21 14:22) [6]

to Ученик © (21.08.02 14:20)
приложения


 
Ученик ©   (2002-08-21 14:28) [7]

>sudiv © (21.08.02 14:22)
:)


 
sudiv ©   (2002-08-21 14:31) [8]

to Ученик © (21.08.02 14:28)
Ну так ведь я тоже ученик,
делал так и все работало, предварительно поискав в списке запущенных приложений нужный хендл.
Насколько понял из вопроса нужно поднять из фона именно приложение.


 
paul_shmakov ©   (2002-08-21 16:33) [9]

2 sudiv:
хэндл процесса и хэндл окна - это абсолютно разные вещи :)


"Metallica (21.08.02 13:17)
Как сделать активным процесс, зная его хэндл."





 
Игорь Шевченко ©   (2002-08-21 16:49) [10]

У приложения Handle нету :-)))


 
Metallica   (2002-08-21 17:00) [11]

Мужики, всеравно ничего не получается. Кнопка приложения на ТаскБаре мигать и все.


 
Ученик ©   (2002-08-21 17:10) [12]

>Metallica (21.08.02 17:00)
Свое или чужое ? :)


 
Metallica   (2002-08-21 18:34) [13]

Ученик © (21.08.02 17:10)
> Свое или чужое ? :)

Для начала, свое.


 
Ученик ©   (2002-08-21 18:36) [14]

>Metallica (21.08.02 18:34)
Это, по таймеру

procedure TForm1.Timer1Timer(Sender: TObject);
var
hForeGround : HWnd;
begin
hForeGround := GetForegroundWindow;
AttachThreadInput(GetWindowThreadProcessId(hForeGround, nil),
GetWindowThreadProcessId(Handle, nil), True);
SetForegroundWindow(Handle);
end;


 
sudiv ©   (2002-08-22 11:49) [15]

to Игорь Шевченко © (21.08.02 16:49)
Окна, окна с кем не бывает ? :)


 
Игорь Шевченко ©   (2002-08-22 13:47) [16]

sudiv © (22.08.02 11:49)

У приложения может быть много окон :-)))


 
Metallica   (2002-08-22 19:46) [17]

Ученик © (21.08.02 18:36)

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


 
Ученик ©   (2002-08-22 23:34) [18]

Еще вариант, проверял на Windows 2000

procedure TForm1.Timer1Timer(Sender: TObject);
begin
EnableWindow(Application.Handle, False);
Application.Minimize;
Application.Restore;
EnableWindow(Application.Handle, True);
SetForegroundWindow(Handle)
end;



Страницы: 1 вся ветка

Текущий архив: 2002.10.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
4-92793
setar
2002-09-16 11:10
2002.10.28
Управление Com портом


1-92536
dens
2002-10-16 10:05
2002.10.28
Получение содержимого массива по ключу


7-92767
dimod
2002-08-23 18:01
2002.10.28
Win2000. Очередь заданий принтера


1-92440
Keplin Sergey
2002-10-17 22:40
2002.10.28
как из dll обрабатывать командную строку?


3-92358
Leny
2002-10-04 15:02
2002.10.28
Удаленная БД