아래 코드를 실행하면 dos 창이 즉시 나타나서 사라집니다. 내가 원하는 것은 윈도우가 머무르고 다음 명령 입력을 기다리는 것이다. 무엇을 나는 창을 보여주는를 유지하려는 경우 내가 startupInfo.hStdInput와 함께 할 내가 문제가 공정 윈도우를 즉시 종료한다는 경우가 아닌 winexec 등도스 창이 나타나 즉시 사라집니다.
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)가 실행 중이고 다음 사용자의 명령을 기다림 –
지정된 '명령'실행이 완료되면 DOS 창이 닫힙니다. '명령 '자체가'핑 (ping)'이기 때문에'핑 (ping) '이 끝나면 DOS 창이 닫힙니다. 'ping'이 종료 된 후에 도스 윈도우를 열어두기를 원한다면,'/ K' 명령 행 스위치를 지정하고 대신'cmd.exe'를 실행하고'cmd.exe '의 초기 명령으로'ping'을 실행해야합니다 '예 :'cmd.exe/K ping 192.168.0.1'. '% COMSPEC %'환경 변수를 사용하여'cmd.exe'에 대한 전체 경로를 얻으십시오. –