當我運行下面的代碼,dos窗口顯示immikidi然後消失。 我想要的是窗口將保持並等待用戶的下一個命令輸入。 我應該怎麼做與startupInfo.hStdInput如果我想保持窗口顯示和我必須使用CreateProcess的在我的項目不是等的WinExecDos窗口顯示然後消失immortiately
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',而不是使用['IcmpSendEcho()'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366050.aspx) ? –
我正在編寫一個項目,我想通過我的win32應用程序連續輸入/輸出控制檯,所以我希望dos窗口在代碼CreateProcess(NULL,命令,NULL,NULL,TRUE,NULL,NULL,NULL和startupInfo, &processInfo)正在執行並等待下一個用戶的命令 –
當指定的'命令'結束運行時,DOS窗口關閉。由於'command'本身就是'ping',所以當'ping'退出時,DOS窗口會關閉。如果想在'ping'退出後保持DOS窗口打開,則需要運行'cmd.exe',而不是使用指定的'/ K'命令行開關,'ping'作爲cmd.exe的初始命令'執行,例如:'cmd.exe/K ping 192.168.0.1'。使用'%COMSPEC%'環境變量來獲取'cmd.exe'的完整路徑。 –