创建命令解释器进程并对其进行写入

时间:2019-02-11 13:53:57

标签: c++ c windows winapi

我一直试图从c ++程序创建cmd.exe,然后能够从程序内部 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()获得的进程/线程ID获取窗口句柄的过程非常复杂。您必须使用EnumWindows()遍历所有活动窗口,这些窗口需要一个回调函数,该回调函数需要检查当前窗口的进程ID是否与我创建的进程的进程ID相同。

我这样做了,结果发现该函数所迭代的所有窗口都不是我的窗口。

所以我想这意味着我创建的该过程的线程没有窗口,但是在那里可以看到外观漂亮的cmd.exe。到底是怎么回事?这不算是窗户吗?如果没有,如何将消息传递到cmd.exe?如果是,如何获取窗口句柄?

我们将不胜感激(也可以通过不同的方式来处理整个cmd)。

0 个答案:

没有答案