Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.11.2012, 19:25
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию Дождаться создания главного окна

есть у меня процесс, который я создал креэйтпроцесс-ом, есть вся информация о нём и параметры, нужно как то дождаться, пока он создаст первое окно. Я не хочу в цикле проверять есть ли у него окна, возможно есь стандартная функция может в рундлл? хуки конечно выход может, хоть и ивращённый, но я с ними не много работал, знаю что можно для одного процесса создать локальный хук без библиотеки, но у меня так не вышло. Может кто помочь - направить?

Последний раз редактировалось reqyz, 27.11.2012 в 19:44.
Ответить с цитированием
  #2  
Старый 28.11.2012, 09:21
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

попробуй WaitForInputIdle
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
reqyz (29.11.2012)
  #3  
Старый 28.11.2012, 11:19
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

Функция 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  
Старый 28.11.2012, 11:30
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

какая конечная цель?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 28.11.2012, 11:36
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
какая конечная цель?
конечная цель - контроль окон конкретного процесса, при создании их, удалении и т д
Ответить с цитированием
  #6  
Старый 28.11.2012, 11:59
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Если задача в том чтобы действительно дождаться, т.е. остановить ту нить из которой был создан процесс - то однозначно WaitForSingleObject. Если же нить создающая процесс должна знать когда окно было создано/уничтожено/свернуто/развернуто и т.п., то вполне хватит SendMessage/PostMessage или, если дело происходит внутри потоков, PostThreadMessage
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
reqyz (29.11.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:37.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025