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

Вниз

Получить Handle запускаемого процесса   Найти похожие ветки 

 
Piero   (2005-11-10 16:17) [0]

Недавно спрашивал, как получить Handle, запускаемого приложения
мне подсказали процедуру creatprocess,
я написал так:

var     si  : tStartUpInfo;
        pi  : TProcessInformation;

FillChar(Si,Sizeof(StartupInfo),#0);
Si.cb := Sizeof(Si);
Si.wShowWindow :=SW_Show;
Si.dwFlags := STARTF_USESHOWWINDOW;

CreateProcess(nil,"E:\2\Project1.exe",nil,nil,False,Normal_PRIORITY_CLASS,nil,nil,si,pi);

Pi.hProcess  должен возвращать, чего мне надо,
но возвращает какое-то 4х значное число, которое с истиной не совпадает...
Чего неправильно? Как исправить? Есть ли жизнь на Марсе?


 
Leonid Troyanovsky ©   (2005-11-10 16:24) [1]


> Piero   (10.11.05 16:17)  

> Pi.hProcess  должен возвращать, чего мне надо,
> но возвращает какое-то 4х значное число, которое с истиной
> не совпадает...



А что есть истина?

--
Regards, LVT.


 
Digitman ©   (2005-11-10 16:31) [2]


> процедуру creatprocess


с какого перепугу процедуру-то ? когда CreateProcess() есть функция  ? лишь при возврате которой True-значения содержимое структуры pi следует рассматривать как актуальное ?


 
Piero   (2005-11-10 16:41) [3]

Digitman ©  да функция, возвращает true,
Leonid Troyanovsky ©,  а истина с которой я сравниваю  application.handle; которое сччитается в запускаемом приложении


 
Digitman ©   (2005-11-10 16:52) [4]


> Piero   (10.11.05 16:41) [3]


> функция, возвращает true


из приведенного кода это вовсе не очевидно


> application.handle


это - из другой оперы, к хэндлу процесса не имеющее отношения


 
Piero   (2005-11-10 16:54) [5]

Приложение запускается, а как получить Handle процесса?


 
Digitman ©   (2005-11-10 17:00) [6]

вот так прямо и получить - Pi.hProcess


 
Piero   (2005-11-10 17:13) [7]

Я потом из 1го приложения отправляю сообщение
var cd : TCopyDataStruct;

 cd.cbData := Length(Edit1.Text)+1;
 cd.lpData := PChar(Edit1.Text);
 SendMessage ( pi.hProcess,WM_COPYDATA,  0, LParam(@cd));

а во 2м оно должно приниматься

type
 TForm2 = class(TForm)
 ...
  public
   procedure ReceiveMessage (var Msg: TMessage); message WM_COPYDATA;

только не принимается
или я не там принимаю?

тогда где принимать? или как посылать чтобы этот обработчик сработал


 
Digitman ©   (2005-11-10 17:14) [8]

ты разницу между хэндлом процесса и хэндлом окна осюсяешь ?)


 
Piero   (2005-11-10 17:22) [9]

Только что понял, скажи мне пожалуйста, как эту разницу записать


 
Digitman ©   (2005-11-10 17:26) [10]


> Piero   (10.11.05 17:22) [9]


а ты вообще в ту ли сторону копаешь ?

интерпроцессную коммуникацию можно организовать и иначе .. и для этого совершенно необязательно оперировать хэндлами окон ..

задачу бы пояснил ...


 
Piero   (2005-11-10 17:31) [11]

Вчера от тебя получил ссылку на статью
"Что такое Named Pipes и как с ними бороться."

Мне гораздо проще надо, организовать связь 2х приложений, которые будут обмениваться короткими сообщениями, вот я и хочу узнать Handle  (процесса или формы)


 
Джо ©   (2005-11-10 17:33) [12]


> вот я и хочу узнать Handle  (процесса или формы)

FindWindow, можно по классу окна, можно по заголовку.


 
Piero   (2005-11-10 17:37) [13]

Джо, я не хочу связываться с заголовком (может он поменяется)
а класс окна, чего мне в вызывающей программе, класс окна вызываемой держать?


 
Джо ©   (2005-11-10 17:40) [14]


> а класс окна, чего мне в вызывающей программе, класс окна
> вызываемой держать?

Переведи?


 
Piero   (2005-11-10 17:44) [15]

FindWindow(Form1,nil) - так искать по классу окна?
Form1 - я откуда возьму?


 
Джо ©   (2005-11-10 17:48) [16]


>  [15] Piero   (10.11.05 17:44)
> FindWindow(Form1,nil) - так искать по классу окна?

Не так. А, например, так:
FindWindow ("TForm1",nil)


 
Зшукщ   (2005-11-10 17:51) [17]

ооооо, точно , спасибо, я тормозил


 
Джо ©   (2005-11-10 17:53) [18]

Только учти, что FindWindow находит только одно окно с заданным классом (можно считать, что первое попавшееся). Следовательно, имя класса должно быть уникальным в пределах системы. Никаких TForm1, TMainForm etc.


 
Digitman ©   (2005-11-11 08:19) [19]


> Piero   (10.11.05 17:31) [11]


можно еще и MMF для этой цели приспособоть, коль NP не устраивают


 
Leonid Troyanovsky ©   (2005-11-11 09:02) [20]


> Piero   (10.11.05 17:31) [11]

> Мне гораздо проще надо, организовать связь 2х приложений,
>  которые будут обмениваться короткими сообщениями, вот я
> и хочу узнать Handle  (процесса или формы)


Запускаемому приложению хендл принимающего окна указывается
в командной строке.
А запущенное приложение передает хендл своего окна-приемника
в параметрах сообщения, скажем, в msg.WParam.

Надо заметить, что, сколь "короткими" не были сообщения, пользоваться
безопаснее WM_COPYDATA  и, конечно, только SendMessage.

--
Regards, LVT.



Страницы: 1 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.028 c
14-1131103189
Pazitron_Brain
2005-11-04 14:19
2005.11.27
Проблема с железом #2.5


2-1131828265
zxc
2005-11-12 23:44
2005.11.27
как рисовать на Tpanel?


14-1131517278
Lamer@fools.ua
2005-11-09 09:21
2005.11.27
В Киеве уже который день туман


1-1130837427
kyn66
2005-11-01 12:30
2005.11.27
Анимация виснет во время процесса.


14-1130338754
oldman
2005-10-26 18:59
2005.11.27
"Черный квадрат" Малевича...