Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 22:27   #1
Аникейка
 
Регистрация: 17.11.2010
Сообщений: 3
По умолчанию Ожидание создания окна после запуска процесса

Запускаю процесс при помощи CreateProcess чтобы получить его PID, а затем пытаюсь получить HWND главного окна этого процесса.
Но окно создается не сразу после запуска процесса а спустя некоторое
время, причем на машинах с разной производительностью оно тоже разное. Примерно от 1 до 10 секунд занимает процесс создания окна...
Сейчас использую просто Sleep так как по другому не умею...
Есть мысль создать таймер и пытаться по интервалу таймера
получить HWND, но приложение без формы неохота с этим заморачиваться, ведь возможно есть более простой способ?

Как грамотно дождаться создания главного окна после запуска процесса чтобы получить его HWND?

Вот такой код использую сейчас
Код:
  try
    PID := ExecProcess(WorkDir+'process.exe','');
    sleep(10000); // хотелось бы избавиться от такого способа
    hWnd := GetWndHandleByPID(PID);
  except
     Alert('#$0!');
  end;
Аникейка вне форума Ответить с цитированием
Старый 24.01.2011, 23:38   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> Как грамотно дождаться

WaitForInputIdle()
mss вне форума Ответить с цитированием
Старый 26.01.2011, 03:28   #3
Аникейка
 
Регистрация: 17.11.2010
Сообщений: 3
По умолчанию

хм, спасибо. делаю WaitForInputIdle(PID, INFINITE) - и ничего все равно не получается...
Аникейка вне форума Ответить с цитированием
Старый 26.01.2011, 03:45   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

эмм, а что есть PID?
если то что я думаю, то вам нужен хендл процесса а не его идентификатор
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли читать DwProcessId,hProcess после CloseHandle(hProcess) после создания процесса через CreateProc Человек_Борща Общие вопросы Delphi 3 09.01.2011 01:07
masm32 - После создания окна оно закрывается:( Wardrag Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 23.08.2010 09:45
Ожидание завершения процесса Человек-Ололо Общие вопросы Delphi 2 08.03.2010 19:39
Прога запуска удаленного процесса alex1989 Фриланс 2 30.11.2009 19:26
Ожидание окончания вызванного процесса Johnson Win Api 11 16.07.2008 23:11