Форум: "WinAPI";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
ВнизОбъясните тупому: после 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c