Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750

Управление видимостью дочернего процесса

07.01.2019, 08:01. Показов 2966. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Консольное приложение можно сделать скрытым или видимым, например, так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <WS2tcpip.h>
int main()
{
    HWND hWnd;
    hWnd = FindWindowA("ConsoleWindowClass", NULL);
    Sleep(500);
    ShowWindow(hWnd, 0);
    Sleep(500);
    ShowWindow(hWnd, 1);
    Sleep(500);
    ShowWindow(hWnd, 0);
    Sleep(500);
    ShowWindow(hWnd, 1);
    Sleep(500);
}

Допустим, я запускаю скрытый дочерний процесс code.exe:
C++
1
2
3
4
5
6
7
8
9
//файл code.exe
#include <WS2tcpip.h>
int main()
{
    HWND hWnd;
    hWnd = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(hWnd, 0);
    system("pause");
}
из родительского приложения, например, так:
C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
int main()
{
    STARTUPINFO cif;
    ZeroMemory(&cif, sizeof(STARTUPINFO));
    PROCESS_INFORMATION pi;
    CreateProcess(L"code.exe", NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &cif, &pi);
    return 0;
}
Вопрос: Можно ли из родительского процесса отобразить скрытое окно дочернего процесса? И как это сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.01.2019, 08:01
Ответы с готовыми решениями:

Создание дочернего процесса
Уважаемые форумчане, у меня возник такой вопрос: Возможно ли средствами с++ создать дочерний процесс для определенного процесса? так...

Создание дочернего процесса
нужно создать дочерний процесс, чтобы если закрыть родительский закрылся и дочерний. но незнаю как можно сделать...

Ожидание завершения дочернего процесса
Привет всем. Задание работы заключается в написании двух программ: главной и дочерней. Главная программа должна запускать дочернюю и...

10
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
08.01.2019, 17:05  [ТС]
Ответов нет...
А если так: Можно ли из родительского приложения видимый дочерний процесс сделать скрытым?
0
 Аватар для Nikto
156 / 138 / 51
Регистрация: 28.11.2009
Сообщений: 460
Записей в блоге: 14
08.01.2019, 21:09
LVV, точно знаю, что можно видимое окно дочернего процесса сделать невидимым при запуске, для консоли и формы разные способы. Вам это подходит?
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
09.01.2019, 10:34  [ТС]
Цитата Сообщение от Nikto Посмотреть сообщение
можно видимое окно дочернего процесса сделать невидимым при запуске
Ну, если так:
CreateProcess(L"code.exe", NULL, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &cif, &pi);
то мне это известно.

Только это "при запуске".
А как сделать окно уже запущенного дочернего процесса невидимым или видимым???
Мне нужно создать переключение дочернего процесса на видимый/невидимый средстами родительского.
0
 Аватар для Nikto
156 / 138 / 51
Регистрация: 28.11.2009
Сообщений: 460
Записей в блоге: 14
09.01.2019, 16:24
LVV, а для чего это? Зная для чего, возможно удастся придумать нестандартный подход или изменить цель задачи
0
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
09.01.2019, 18:04  [ТС]
Цитата Сообщение от Nikto Посмотреть сообщение
а для чего это
Ну, в общем, у меня сервер сделан в консольном приложении на С++.
Я вместо log-файла вывожу служебную информацию в консольное окно.
Это удобно в том смысле, что иформация видна сразу: кто присоединился, кто отключился, кто какой запрос сделал и т.п.
Но при нормальной работе (не в режиме отладки) видеть это консольное окно совершенно не обязательно.
Более того, включается и отключается этот сервер через отдельную панель управления - приложение WindowsForms на Visual C++.
Вот я и подумал, почему бы через эту панель управления не сделать включение-отключение видимости дочернего процесса (то есть консольного сервера).
Сначала думал разобраться, как это сделать в консоли... а потом попробовать сделать и в WindowsForms (CLI)
0
 Аватар для Nikto
156 / 138 / 51
Регистрация: 28.11.2009
Сообщений: 460
Записей в блоге: 14
10.01.2019, 11:24
LVV, то есть то самое дочернее приложение вы можете переписать под ваши нужды (раз оно ваше)? Пусть уж настройки из файла считывает..
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
10.01.2019, 11:42  [ТС]
Цитата Сообщение от Nikto Посмотреть сообщение
дочернее приложение вы можете переписать под ваши нужды (раз оно ваше)? Пусть уж настройки из файла считывает..
Вы предлагаете дочерним приложением зацикленно считывать из файла какой нибудь параметр, контролируемый родительским процессом?
Неплохая идея (лучше пока никто не предложил).
Только у меня дочерний процесс сутками работать будет...
Как это скажется на жестком диске при постоянном обращении к файлу?
Вот если бы можно было создать в памяти общую глобальную переменную (ячейку памяти) к которой бы оба процесса имели бы доступ...
0
 Аватар для Nikto
156 / 138 / 51
Регистрация: 28.11.2009
Сообщений: 460
Записей в блоге: 14
10.01.2019, 13:59
LVV, я точно не знаю как устроены pipes, но возможно они подойдут
PS http://loi.sscc.ru/gis/oop/win32api/win32_51.html
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
10.01.2019, 19:47  [ТС]
Тут, мне кажется, нужно действовать через переменные окружения.
Задаёшь такую переменную в родительском процессе, а дочерний процесс её считывает и соответственно реагирует.
Я дилетант в этом вопросе, но попробую разобраться...
1
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
10.01.2019, 20:40
Лучший ответ Сообщение было отмечено LVV как решение

Решение

Можно както так, но не знаю зачем)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <Windows.h>
 
int main()
{
    STARTUPINFO sinf;
    PROCESS_INFORMATION pi;
    HWND hWnd = NULL;
 
    ZeroMemory(&sinf, sizeof(STARTUPINFO));
    sinf.lpTitle = L"XX_Console";
    sinf.dwFlags = STARTF_USESHOWWINDOW;
    sinf.wShowWindow = SW_HIDE;
 
    CreateProcess(L"C:\\Windows\\system32\\cmd.exe", NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &sinf, &pi);
 
    Sleep(100);
 
    hWnd = FindWindow(NULL, L"XX_Console");
 
    std::cout << hWnd;
 
    Sleep(500);
    ShowWindow(hWnd, 0);
    Sleep(500);
    ShowWindow(hWnd, 1);
    Sleep(500);
    ShowWindow(hWnd, 0);
    Sleep(500);
    ShowWindow(hWnd, 1);
    Sleep(500);
 
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2019, 20:40
Помогаю со студенческими работами здесь

Чтение stdout дочернего процесса
Задача: запустить консольную утилиту и отобразить процесс ее деятельности. Пример: pngout.exe screen.png 1.png При запуске,...

Завершение дочернего процесса по ошибке
Например, я запускаю дочерний процесс 1.ехе и ожидаю его окончания: #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace...

Корректное завершение дочернего процесса
Я тестирую оконную программу - открываю и закрываю её несколько раз. Иногда программа завершается с ошибкой. Мне надоело запускать и...

Остановка дочернего процесса по его ошибке
В текущей директории имеется файл code.exe, которй принимает два числа и выводит их сумму. Например, скомпилированнй из такого: ...

Получить код завершения дочернего процесса
Можно ли в материнском процессе получить с каким кодом завершился дочерний процесс? Добавлено через 20 секунд cout &lt;&lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru