我一直试图从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)。