![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)
| ||