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

Вниз

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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.042 c
8-1132575902
wicked
2005-11-21 15:25
2006.04.23
кватернионы и преобразования...


2-1144318090
Рафик
2006-04-06 14:08
2006.04.23
ADO


4-1138723860
Beduir
2006-01-31 19:11
2006.04.23
Как отловить событие изменения элемента в ListView


15-1143717360
Mike Kouzmine
2006-03-30 15:16
2006.04.23
Тейлора поймали - будут судить.


11-1124738304
shalex
2005-08-22 23:18
2006.04.23
Не могу скачать String Grid