Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как определить, завершил ли другой процесс создание окна?  (Прочитано 10735 раз)
0 Пользователей и 1 Гость смотрят эту тему.
homosapien
Интересующийся

de
Offline Offline

« : 25-03-2016 23:15 » 

Столкнулся со следующей проблемой: я запускаю процесс другой программы и она после своего запуска открывает окно, которое собственно мне и нужно.
т.е. в общем код выглядит так:
CreateProcess...
...
FindWindow...
Но, если запустить поиск окна сразу после старта процесса, то окно не успевает создаться.
Попробовал сделать так:
Код:
BOOL isWindowReady = FALSE;
while(!isWindowReady)
{
    if (hwnd == NULL) {
        hwnd = FindWindow(windowClass, NULL);
    }
    else {
        isWindowReady = TRUE;
    }
}
Не работает.
Если просто вставить между созданием процесса Sleep(например 800), то всё работает. Но пользоваться Sleep как-то некрасиво, да и не очень надёжно.
Вот собственно такая проблема.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 26-03-2016 05:08 » new

Если это два твоих приложения, то можеш использовать, что то типа семафора. В начале конструктора окна поднимаеш флажок, в конце опускаеш. Во втором приложении ставиш на ожидание.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
zubr
Гость
« Ответ #2 : 26-03-2016 05:14 » 

После запуска процесса используй функцию WaitForInputIdle вместо Sleep.
Записан
homosapien
Интересующийся

de
Offline Offline

« Ответ #3 : 26-03-2016 07:34 » 

Если это два твоих приложения
К сожалению, это не так.

Добавлено через 1 час, 21 минуту и 17 секунд:
После запуска процесса используй функцию WaitForInputIdle вместо Sleep.
да тоже не подойдёт, так как сначала запускается процесс, а потом через некоторое время он открывает окно, которое мне и нужно.
« Последнее редактирование: 26-03-2016 08:55 от homosapien » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 26-03-2016 19:20 » 

Но пользоваться Sleep как-то некрасиво, да и не очень надёжно.
Некрасиво, но с надёжностью вроде всё нормально. Красиво и надёжно - сделать периодичный таймер, с callback-ом или оконным сообщением, и при его срабатывании искать окно. При обнаружении останавливать таймер.
Записан
homosapien
Интересующийся

de
Offline Offline

« Ответ #5 : 31-03-2016 18:19 » 

Вад, огромное спасибо за таймеры!
Наконец всё робит!
« Последнее редактирование: 31-03-2016 19:02 от homosapien » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines