Создание процесса интерпретатора команд и запись в него - PullRequest
0 голосов
/ 11 февраля 2019

Я пытался создать cmd.exe из c ++ - программы, а затем смог выполнить команды из программы внутри cmd.exe, чтобы я мог просмотретьрезультаты операции в cmd.exe.CreateProcessA() - это функция, которую я использовал:

_STARTUPINFOA CMD_StartupInfo = {};
CMD_StartupInfo.cb = sizeof(_STARTUPINFOA);

_PROCESS_INFORMATION CMD_ProcessInfo = {};

CreateProcessA("C:\\Windows\\System32\\cmd.exe",
               0,
               NULL,
               NULL,
               FALSE,
               CREATE_NEW_CONSOLE,
               NULL,
               NULL,
               &CMD_StartupInfo,
               &CMD_ProcessInfo);

Файл cmd.exe открылся и, похоже, работает.Тогда я решил использовать PostMessage() для передачи сообщений WM_KEYDOWN в cmd.exe для выполнения команды.Для этой функции мне понадобился дескриптор окна, и оказалось, что процесс получения дескриптора окна из идентификатора процесса / потока, полученного из CreateProcessA(), чертовски сложен.Вы должны перебрать все активные окна с помощью EnumWindows(), для которого требуется функция обратного вызова, которая должна проверить, совпадает ли идентификатор процесса текущего окна с идентификатором процесса, который я создал.

Я сделал это, и оказалось, что ни одно из окон, которые повторяла функция, не было моим окном.

Итак, я предполагаю, что это означает, что созданный мною поток этого процесса не имеет окон, но я вижу красивыесмотря cmd.exe прямо там.Что здесь происходит?Разве это не считается окном?Если нет, как я могу передать сообщения в cmd.exe и, если да, как мне получить дескриптор окна?

Любая помощь приветствуется (также есть идеи по-разному выполнять весь cmd).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...