Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
9-1121128731
Jfc
2005-07-12 04:38
2005.11.27
Помогите с алгоритмом


14-1130868063
Bogdan1024
2005-11-01 21:01
2005.11.27
Помогите собрать комп!!!


2-1131103736
syte_ser78
2005-11-04 14:28
2005.11.27
как сохранить изменения в базе? BDE.


3-1129121503
Petrovski
2005-10-12 16:51
2005.11.27
Как изменить последовательность событий


3-1129038011
stepan_mk
2005-10-11 17:40
2005.11.27
ODAC & ORAARRAY





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