C++ Dos窗口出现,然后立即消失
当我运行下面的代码时,dos窗口立即出现,然后消失。 我想要的是窗口将停留并等待用户的下一个命令输入。 如果我想保持窗口显示,并且我必须在我的项目中使用createProcess,而不是winexec等,那么我应该如何处理startupInfo.hstInputC++ Dos窗口出现,然后立即消失,c++,cmd,createprocess,C++,Cmd,Createprocess,当我运行下面的代码时,dos窗口立即出现,然后消失。 我想要的是窗口将停留并等待用户的下一个命令输入。 如果我想保持窗口显示,并且我必须在我的项目中使用createProcess,而不是winexec等,那么我应该如何处理startupInfo.hstInput int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpComLine,
int nCmdShow)
{
SECURITY_ATTRIBUTES secAttr;
HANDLE hRead,hWrite;
secAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
secAttr.lpSecurityDescriptor = NULL;
secAttr.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&secAttr,0))
{
return FALSE;
}
char command[1024];
strcpy(command,"ping 192.168.0.1");
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
startupInfo.cb = sizeof(STARTUPINFO);
GetStartupInfo(&startupInfo);
startupInfo.hStdError = hWrite;
startupInfo.hStdOutput = hWrite;
startupInfo.hStdInput = hRead;
startupInfo.lpTitle = "CMD";
if (!CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&startupInfo,&processInfo))
{
MessageBox(NULL, "Failed", NULL, MB_OK);
CloseHandle(hWrite);
CloseHandle(hRead);
return FALSE;
}
CloseHandle(hWrite);
CloseHandle(hRead);
return 0;
}
如果问题是进程窗口立即关闭,可能是您应该添加
暂停
。。。要查看您的ping
命令的结果
现在,我决不是c++
专家。。。但我建议,尝试以下几行代码
CreateProcess(
"c:\\windows\\system32\\cmd.exe",
"/k ping 192.168.0.1 && pause && exit",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&startupInfo,&processInfo);
为什么要将
&&pause&&exit
和/k
开关一起使用?OP说“等待用户的下一个命令输入”,但是这个组合不允许输入更多的用户命令。单独使用/k
可能会导致错误。如果你刚要退出,你最好放弃&&exit
,使用/c
而不是/k
@RemyLebeau,因为你可能是对的。。。我有点错过了“下一个命令”部分…为什么你要像这样手动运行ping
,而不是使用?我正在编写一个项目,我想通过我的win32应用程序通过控制台连续输入/输出,所以我希望dos窗口在代码创建过程后保持打开状态(NULL、command、NULL、NULL、TRUE、NULL、NULL、NULL、NULL、startupInfo和processInfo)正在执行并等待下一个用户命令指定的命令运行完成后,DOS窗口关闭。由于命令本身就是ping
,因此当ping
退出时,DOS窗口将关闭。如果要在ping
退出后保持DOS窗口打开,则需要运行ping
>cmd.exe
改为指定了/K
命令行开关,并将ping
作为cmd.exe
执行的初始命令,例如:cmd.exe/K ping 192.168.0.1
。使用%COMSPEC%
环境变量获取cmd.exe
.Ty的完整路径,先生!但是如何输入我的公用行to cmd.exe?在本例中,“code WriteFile(hRead,buffer,1024,&bytesRead,NULL)”没有执行我告诉过您的任何操作。请将命令字符串设置为“cmd/K ping 192.168.0.1”
并将整个字符串传递给CreateProcess()
。