Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить Handle запускаемого процесса


Piero ©   (2005-11-10 16:17:00) 

Недавно спрашивал, как получить 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-11 09:02:00) [1]


> Piero   (10.11.05 17:31) [11]

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


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

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

--
Regards, LVT.


Digitman   (2005-11-11 08:19:00) [2]


> Piero   (10.11.05 17:31) [11]


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


Джо   (2005-11-10 17:53:00) [3]

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


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

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


Джо   (2005-11-10 17:48:00) [5]


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

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


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

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


Джо   (2005-11-10 17:40:00) [7]


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

Переведи?


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

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


Джо   (2005-11-10 17:33:00) [9]


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

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


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

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

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


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


> Piero   (10.11.05 17:22) [9]


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

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

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


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

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


Digitman   (2005-11-10 17:14:00) [13]

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


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

Я потом из 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:00:00) [15]

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


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

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


Digitman   (2005-11-10 16:52:00) [17]


> Piero   (10.11.05 16:41) [3]


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


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


> application.handle


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


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

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


Digitman   (2005-11-10 16:31:00) [19]


> процедуруcreatprocess


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


Leonid Troyanovsky   (2005-11-10 16:24:00) [20]


> Piero   (10.11.05 16:17)  

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



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

--
Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо