Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
4-92774
catcher
2002-09-13 11:20
2002.10.28
Как найти все сегменты памяти чужого процесса, для чтения из них?


4-92817
Yegor Derevenets
2002-09-07 17:46
2002.10.28
Размер оперативной памяти, выделенной процессу


3-92376
Maik
2002-10-07 18:30
2002.10.28
Список активных пользователей


3-92395
Shaman
2002-10-07 20:32
2002.10.28
Developer Express


14-92651
AFrolov
2002-10-03 15:37
2002.10.28
Обоснование разработки программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский