Форум: "Система";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Вниз->>> Как сделать активным процесс, зная его хэндл. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c