Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.012 c
15-1144059580
balepa
2006-04-03 14:19
2006.04.23
Как можно "Ваше имя" сменить ?


15-1143661950
DillerXX
2006-03-29 23:52
2006.04.23
Избитая тема - какой телефон выбрать


2-1144651711
Locke
2006-04-10 10:48
2006.04.23
как сохраить рисунок с канвы?


3-1141069709
shulik
2006-02-27 22:48
2006.04.23
DBGrid и вставка-редактирование


15-1143711540
Думкин
2006-03-30 13:39
2006.04.23
Фильм





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский