以下のコードを実行すると、ドーズウィンドウがすぐに表示され、消えます。 私が望むのは、ウィンドウがユーザーの次のコマンド入力を待機して待機することです。 WINEXECなどではない、私は窓の上映を維持したいと私は私のプロジェクトでは、CreateProcessを使用する必要がある場合、私はstartupInfo.hStdInputで何をすべきドーズウィンドウが表示され、すぐに消えます
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;
}
['IcmpSendEcho()'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366050.aspx)の代わりに、手動で 'ping'を手動で実行しているのはなぜですか? ? –
私はWin32アプリケーションを介してコンソールで入出力を継続したいプロジェクトを書いていますので、コードCreateProcess(NULL、コマンド、NULL、NULL、TRUE、NULL、NULL、NULL、&startupInfo、 &processInfo)が実行され、次のユーザーのコマンドを待ちます –
指定された 'command'が実行を終了すると、DOSウィンドウが閉じます。あなたの 'コマンド 'は' ping'だけであるので、 'ping'が終了するとDOSウィンドウが閉じます。 'ping'終了後にDOSウィンドウを開いたままにしたい場合は、'/K'コマンドラインスイッチを指定して 'cmd.exe'を実行し、' cmd.exe 'の初期コマンドとして 'ping'を実行する必要があります'を実行します。例えば、' cmd.exe/K ping 192.168.0.1'。 '%COMSPEC%'環境変数を使って 'cmd.exe'へのフルパスを取得してください。 –