Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.31;
Скачать: CL | DM;

Вниз

Объясните тупому: после CreateProcess(......., si, pi)   Найти похожие ветки 

 
@andrew ©   (2002-09-18 12:53) [0]

что у меня лежит в pi.hProcess и как мне это преобразовать в нормальный хендл процесса, чтобы потом SendMessage(?? и т.д.
Большое спасибо. Или я вообще "не о том". А как тогда?


 
Alx2 ©   (2002-09-18 13:05) [1]

SendMessage хендл окошка просит.

Я после того, как процесс приготавливался к обработке сообщений, смотрел окошки, порождденные его потоками и запоминал их хэндлы. Через них и общались


 
@andrew ©   (2002-09-18 13:08) [2]

А на пальцах :-)


 
Digitman ©   (2002-09-18 13:11) [3]

В pi.hProcess "лежит" хэндл процесса, а не хэндл окна.
Ф-ция SendMessage() же, будучи предназначенной для посылки сообщений некоему потенциально существующему в системе окну, требует именно хэндл целевого окна (которое может быть создано - а может и не создано - одним из кодовых потоков процесса; например, "пустое" конс.приложение не создает никаких окон, но процесс такого приложения тем не менее имеет хэндл)

Если ты уверен (или предполагаешь), что некий процесс, созданный тобой ф-цией CreateProcess(), создает некое окно, которому ты желаешь послать некое сообщение, ты должен найти это окно среди прочих окон, регистрируемых системой всякий раз, когда некий процесс в некоем своем код.потоке успешно выполняет ф-цию CreateWindow[Ex](). При регистрации окна система фиксирует класс и титульную строку окна (последняя в последствии может быть и изменена процессом-создателем этого окна в любой момент времени).
Эти параметры (оба или хотя бы какой-то один) как раз и следует использовать для поиска существующего окна в системе. Для поиска окна существует ф-ция FindWindow[Ex](), принимающая параметрами ссылки на образцы класса и подписи искомого окна, и возвращающая хэндл окна, если таковое обнаружено системой. Вот этот самый хэндл и следует использовать во всех ф-циях, предназначенных для посылки/приема оконных сообщений.


 
Alx2 ©   (2002-09-18 13:20) [4]

Также можно попробовать GetWindowThreadProcessId и EnumWindows, если о процессе только его хэндл и известен.


 
@andrew ©   (2002-09-18 13:32) [5]

А.а.а.а.а.а
Ну тогда не подскажите:
Мне бы надо отловить конец этого процесса. Можно ли поставить на завершение процесса хук: какой тип хука должен быть и какой месседж я должен ловить?


 
Digitman ©   (2002-09-18 13:42) [6]

Никакой хук ставить не требуется. Просто вызови одну из ф-ций ожидания сигналов сист.объектов синхронизации (WaitForSingleObject, MsgWaitForMultipleObjects и т.п.), передав ей в кач-ве параметра хэндл процесса, чье завершение ты ожидаешь. Возрат такой ф-цией результата WAIT_OBJECT_0 (в ряде случаев - WAIT_ABANDONED) есть факт завершения интересующего тебя процесса, чей хэндл ты передал в ф-цию в кач-ве параметра - объекта синхронизации.


 
@andrew ©   (2002-09-18 13:50) [7]

>Digitman
Родной мой! :-) Где же ты был раньше. А я уж изучил хуки :-) ok. Стоп а я получу что хочу: мне надо, чтобы мое приложение работало как работало и лишь в случае завершения запущенного процесса выкидывало месседж. Тобишь как мне дожидаться WAIT_OBJECT_0?


 
Alx2 ©   (2002-09-18 13:57) [8]

Можно попробовать завести дополнительно ждущий поток, цель которого - дождаться завершения твоего процесса.


 
Digitman ©   (2002-09-18 14:10) [9]

>@andrew

Воспользуйся советом от <Alx2> - это одно из вполне приемлемых решений.

P.S.
>>Где же ты был раньше

Да покурить выходил).. Пока ты про "хуки" изучал, начитавшишь местных знатоков и поддавшись бездумному ажиотажу : "хукать" вся и все, одним крючком да без разбору)))))


 
Yegor Derevenets   (2002-09-18 16:34) [10]

Постараюсь в ближайшее время выложить прогу Run. Там все демонстрируется - и под NT и под W9Х.



Страницы: 1 вся ветка

Текущий архив: 2002.10.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
6-101429
klik
2002-08-28 09:51
2002.10.31
А что будет?


14-101458
Th
2002-10-09 17:46
2002.10.31
Service Pask для D6


3-101055
AM
2002-10-11 15:57
2002.10.31
Помогите пожалйста с запросом


1-101271
Vladislav
2002-10-22 14:22
2002.10.31
ShellExecute


3-101103
Nona
2002-10-07 21:12
2002.10.31
Помогите а то я уж запарился!