Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизВсе ищем Handle... Найти похожие ветки
← →
VID © (2004-02-23 13:33) [0]Есть ProcessID процесса..
Необходимо узнать handle его главного окна (которое создаётся в главном потоке)...
т.е. то что окно есть - я знаю, не знаю как найти handle его главного окна..
этот handle нужен для того что бы потом отправить сообщение (postmessage) этому окну, однако если кто нибудь знает как отправить сообщение ПРИЛОЖЕНИЮ зная его ProcessID, и без хэндла главного окна, то пишите плз )
← →
AviDen © (2004-02-23 15:05) [1]Окна в Винде относятся не к процессам, а к потокам.
Для отправки сообщения в поток используй PostThreadMessage
Но так нельзя посылать сообщения окнам (т.е., если ты хочешь скрыть или задизейблить какое-нить окно приложения, то мессагу нужно слать именно окну).
А найти главное окно потока стандартными методами нельзя - только перебирать все окна потока (EnumThreadWindows) и смотреть, какое из них главное по тебе известным признакам (напр., по заголовку / имени класса).
← →
Digitman © (2004-01-23 13:38) [2]
function IsMainAppWindow(Wnd: THandle): 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): THandle;
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;
(c) JEDI
p.s. работает ожидаемым образом только в случае если гл.окно приложения - видимое (имеет на момент проверки флаг WS_VISIBLE)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.029 c