Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

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

Ответ
 
Опции темы
Старый 09.11.2018, 15:47   #1
noskill24
Новичок
 
Регистрация: 09.11.2018
Сообщений: 6
Репутация: 10
По умолчанию СreateProcess из Win32Gui с ожиданием завершения.

Я новичек в win32gui и мой вопрос такой:

Есть простое win32gui приложение с главным окном (и соответсвенно с message loop-ом). С его принципом работы я в принципе разобрался.

1. Из него требуется запустить консольное приложение (например CreateProcess), определить когда оно зваершилось и получить его "exit code" в родительском win32gui. Как это сделать? Можете описать принцип и какие функции мне гуглить?

2. Также нужна следующая функция - во время работы консольного приложения нужна возможность из родительского приложения скрывать или показывать окно консольного приложения (при нажатие какой-нибудь кнопки, например). Как скрывать или показывать окно дочернего процесса во время исполнения?
noskill24 вне форума   Ответить с цитированием
Старый 09.11.2018, 15:57   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,487
Репутация: 2073
По умолчанию

Цитата:
Сообщение от noskill24 Посмотреть сообщение
1. Из него требуется запустить консольное приложение (например CreateProcess), определить когда оно зваершилось и получить его "exit code" в родительском win32gui. Как это сделать? Можете описать принцип и какие функции мне гуглить?
Открываете офф доку по функции https://docs.microsoft.com/en-us/win...createprocessw
Читаете ее. В разделе возвращаемое значение видите вместе с сылкой
Цитата:
To get the termination status of a process, call GetExitCodeProcess.
Читаете дальше и видите ссылку на пример https://docs.microsoft.com/en-us/win...ting-processes
Там видите еще одну функцию, с которой ждут завершения процесса, https://docs.microsoft.com/en-us/win...orsingleobject

Цитата:
Сообщение от noskill24 Посмотреть сообщение
2. Также нужна следующая функция - во время работы консольного приложения нужна возможность из родительского приложения скрывать или показывать окно консольного приложения (при нажатие какой-нибудь кнопки, например). Как скрывать или показывать окно дочернего процесса во время исполнения?
https://docs.microsoft.com/en-us/win...ser-showwindow
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 09.11.2018, 18:18   #3
noskill24
Новичок
 
Регистрация: 09.11.2018
Сообщений: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Открываете офф доку по функции https://docs.microsoft.com/en-us/win...createprocessw
Читаете ее. В разделе возвращаемое значение видите вместе с сылкой

Читаете дальше и видите ссылку на пример https://docs.microsoft.com/en-us/win...ting-processes
Там видите еще одну функцию, с которой ждут завершения процесса, https://docs.microsoft.com/en-us/win...orsingleobject


https://docs.microsoft.com/en-us/win...ser-showwindow
1. Ну и как WaitForSingleObject использовать с message-loop в родительском приложении?

2. Ну и как получить hwnd дочернего процесса?
noskill24 вне форума   Ответить с цитированием
Старый 09.11.2018, 18:20   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,487
Репутация: 2073
По умолчанию

Как обычно. Проверяете, если не готово, то крутитесь дальше. Проблема в чем?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 09.11.2018, 18:29   #5
noskill24
Новичок
 
Регистрация: 09.11.2018
Сообщений: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Как обычно. Проверяете, если не готово, то крутитесь дальше. Проблема в чем?
А если я, допустим, хочу запускать рандомное количество консолей. Но по завершении работы каждой консоли, получать уведомление или вызов какой-нибудь callback ф-ии?
noskill24 вне форума   Ответить с цитированием
Старый 09.11.2018, 18:36   #6
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,487
Репутация: 2073
По умолчанию

Самый простой вариант: запустить поток, пусть он ждет и сигналит. Можете даже запуск делать из потока.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 09.11.2018, 18:47   #7
noskill24
Новичок
 
Регистрация: 09.11.2018
Сообщений: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Самый простой вариант: запустить поток, пусть он ждет и сигналит. Можете даже запуск делать из потока.
А сигналит как лучше? USER-Месседжем в главное окно?
noskill24 вне форума   Ответить с цитированием
Старый 09.11.2018, 18:49   #8
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,487
Репутация: 2073
По умолчанию

Зависит от задачи. Если callback, то может вообще просто вызова его хватит.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 09.11.2018, 18:53   #9
noskill24
Новичок
 
Регистрация: 09.11.2018
Сообщений: 6
Репутация: 10
По умолчанию

А hwnd дочерней консоли из handle можно плучить только поиском? Еще же надо дождаться, чтобы окно это создалось...

А есть вариант создать "как-бы свою дочернюю консоль" и сразу иметь ее hwnd, а в ней запустить процесс?
noskill24 вне форума   Ответить с цитированием
Старый 09.11.2018, 19:01   #10
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,487
Репутация: 2073
По умолчанию

Цитата:
Сообщение от noskill24 Посмотреть сообщение
А hwnd дочерней консоли из handle можно плучить только поиском? Еще же надо дождаться, чтобы окно это создалось...
КрейтПроцесс же хендлы возвращает.

Цитата:
Сообщение от noskill24 Посмотреть сообщение
А есть вариант создать "как-бы свою дочернюю консоль" и сразу иметь ее hwnd, а в ней запустить процесс?
Консоль-то создать можно. Но вы уверены, что она вам нужна? Почему просто сразу нужный процесс не запускать?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ожидание завершения потоков Voody Общие вопросы Delphi 11 14.06.2016 07:10
Ожидание завершения DrBAXA Общие вопросы Delphi 8 26.01.2013 21:42
Не ждет завершения процедуры. myg Общие вопросы Delphi 8 18.01.2012 19:57
Как правильно запустить внешнюю программу с ожиданием ? oren_yastreb Общие вопросы Delphi 1 22.11.2010 19:26


19:37.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru