![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить 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.