![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() есть у меня процесс, который я создал креэйтпроцесс-ом, есть вся информация о нём и параметры, нужно как то дождаться, пока он создаст первое окно. Я не хочу в цикле проверять есть ли у него окна, возможно есь стандартная функция может в рундлл? хуки конечно выход может, хоть и ивращённый, но я с ними не много работал, знаю что можно для одного процесса создать локальный хук без библиотеки, но у меня так не вышло. Может кто помочь - направить?
Последний раз редактировалось reqyz, 27.11.2012 в 19:44. |
#2
|
||||
|
||||
![]() попробуй WaitForInputIdle
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
reqyz (29.11.2012)
|
#3
|
|||
|
|||
![]() Функция WaitForInputIdle ждет до тех пор, пока заданный процесс не дождется ввода данных пользователем, без задержки ввода, или до тех пор, пока не истечет интервал блокировки по времени.
не то Ладно, как поставить хук на конкретный мною известный поток, в библиотеке Код:
library dll; uses SysUtils, windows, Classes; var Hook:HHOOK; Handle:THandle; HCBT2:longword; function CreateWND(code: integer; wParam: word; lParam: longword): longword; stdcall; begin if Code<0 then begin Result := CallNextHookEx(Hook, code, WParam, LParam); exit; end; if(code=HCBT2)then begin Handle:=wParam; UnhookWindowsHookEx(Hook); end; end; function SetWnd(HCBT,dwThreadId:longword):THandle; begin Handle:=0; HCBT2:=HCBT; Hook:=SetWindowsHookEx(WH_CBT,@CreateWND,HInstance,dwThreadId); repeat until(Handle>0); end; exports SetWnd; end. Hook возвращает 0 и хук не ставится. вызываю так Код:
var SetWND:function(HCBT,dwThreadId:longword):THandle; dll:=LoadLibrary('dll.dll'); @SetWND:=GetProcAddress(dll,'SetWnd'); Последний раз редактировалось reqyz, 28.11.2012 в 11:31. |
#4
|
||||
|
||||
![]() какая конечная цель?
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
||||
|
||||
![]() Если задача в том чтобы действительно дождаться, т.е. остановить ту нить из которой был создан процесс - то однозначно WaitForSingleObject. Если же нить создающая процесс должна знать когда окно было создано/уничтожено/свернуто/развернуто и т.п., то вполне хватит SendMessage/PostMessage или, если дело происходит внутри потоков, PostThreadMessage
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
reqyz (29.11.2012)
|