Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизПолучить 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.014 c