Главная страница
    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.018 c
14-1130950980
Pazitron_Brain
2005-11-02 20:03
2005.11.27
Нужен крэк для СП2.


2-1131805105
Olga_b
2005-11-12 17:18
2005.11.27
ПРОПИСНЫЕ БУКВЫ!


2-1131302018
ArtemESC
2005-11-06 21:33
2005.11.27
Дин.массивы


2-1131451435
fwn
2005-11-08 15:03
2005.11.27
Вопросик


4-1127742827
Cosinus
2005-09-26 17:53
2005.11.27
Обращение к системному сервису





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