Я пытался создать 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).