Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизHandle и PID Найти похожие ветки
← →
Matrex © (2006-01-31 19:45) [0]Коллеги! Как послать сообщение приложению зная его PID (идентификатор процесса). Другими словами надо получить Handle процесса зная PID.
← →
xShadow © (2006-01-31 19:47) [1]Сообщения посылаются окну или я что то пропустил?
← →
begin...end © (2006-01-31 20:41) [2]> Matrex © (31.01.06 19:45)
> Другими словами надо получить Handle процесса зная PID.
OpenProcess
← →
Matrex © (2006-01-31 21:19) [3]В моем случае сообщение надо послать окну (а вообще почему сообщение не может быть послано консольному приложению?), и конечно же мне надо получить Handle окна... А вот OpenProcess дает Handle непонятно чего (возможно именно приложения) - этот Handle не "воспринимает" сообщения, по крайней мере, те которые я пробовал (свернуть, развернуть, закрыть и т.д.). В таком случае, наверно, есть возможность связать Handle окном? Но каким образом?
← →
kaZaNoVa © (2006-01-31 21:33) [4]
> свернуть, развернуть, закрыть
конечно тока окну .. а окно искать Findwindow() и ей подобные кажецо
← →
Rouse_ © (2006-01-31 21:35) [5]
> вообще почему сообщение не может быть послано консольному
> приложению
Сообщения у нас зовуться Оконными сообщениями, отсюда следует их следует отправлять окну, а должна принимать оконная процедура...
← →
xShadow © (2006-01-31 21:36) [6]Псособ который пользую я.
Ищещь все окна через FindWindow и т.д. и попутно определяешь их PID через функцию GetWindowThreadProcessId( Wnd, tPID ) которая по Wnd выдаёт PID процесса, находишь нужный пид и соответственно Handle окна
← →
xShadow © (2006-01-31 21:46) [7]
//Ищет окно по его PID но их моежт быть и не одно тут все
//заточено для консольного приложения
Function Find( PID: Cardinal; var Te: String ): hWnd;
var Wnd : hWnd;
Buff: array[0..127] of Char;
tPid: Cardinal;
Begin
Find := 0;
Wnd := FindWindow( "Progman", "Program Manager" );
Wnd := GetWindow( Wnd, gw_HWndFirst );
While Wnd <> 0 do
Begin
GetWindowText( Wnd, buff, sizeof( buff ) );
Te := StrPas( buff );
GetWindowThreadProcessId( Wnd, tPID );
if tPID = PID then
Begin
Find := Wnd;
Break;
end;
Wnd := GetWindow( Wnd, gw_hWndNext );
end;
end;
Нарыл в древнем проекте.
← →
Pit © (2006-01-31 22:01) [8]как ты ваще нашёл свой ID ? скажи мне?
var
ProcessHandle: THandle;
winHandel: hWnd;
begin
winHandel:= FindWindow(....);
GetWindowThreadProcessId(winHandel,ProcessId);
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, ProcessId);
handle := ProcessHandle ;
← →
Matrex © (2006-02-01 21:09) [9]Господа, спасибо за внимание к моей проблеме, однако что-то здесь не то… Функции, которые Вы предлагали выдают Handle чего-то совсем иного. Так, например Handle полученный вышеупомянутой функцией и Handle полученный тупым перебором форм разные. Так вот… посылка сообщения SendMessage(Handle,WM_CLOSE,0,0) в первом случае ничего не делает, во втором – успешно закрывает форму… Где искать правду? На всякий случай кусок кода (немного переработаный для моих нужд):
Function TImageProcess.GetFormHandle(pe32:TProcessEntry32):hWnd;
var Wnd : hWnd;
tPid: Cardinal;
tr: Cardinal;
Begin
Wnd:=Application.Handle;
Wnd:=GetWindow(Wnd,gw_HWndFirst);
While Wnd<>0 do Begin
GetWindowThreadProcessId(Wnd,tPid);
result:=Wnd;if tPID=pe32.th32ProcessID then exit;
Wnd:=GetWindow(Wnd,gw_hWndNext);
end;
result:=0;
end;
← →
Гошик Кувшинов (2006-02-03 12:51) [10]тут про все эти хендлы пример есть http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1167
← →
Eraser © (2006-02-03 13:34) [11]
> Matrex © (31.01.06 19:45)
Сообщение нельзя послать процессу. Его можно послать либо окну, либо потоку.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c