2017-04-14 124 views
0

當我運行下面的代碼,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; 
} 
+0

爲什麼你會像這樣手動運行'ping',而不是使用['IcmpSendEcho()'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366050.aspx) ? –

+0

我正在編寫一個項目,我想通過我的win32應用程序連續輸入/輸出控制檯,所以我希望dos窗口在代碼CreateProcess(NULL,命令,NULL,NULL,TRUE,NULL,NULL,NULL和startupInfo, &processInfo)正在執行並等待下一個用戶的命令 –

+0

當指定的'命令'結束運行時,DOS窗口關閉。由於'command'本身就是'ping',所以當'ping'退出時,DOS窗口會關閉。如果想在'ping'退出後保持DOS窗口打開,則需要運行'cmd.exe',而不是使用指定的'/ K'命令行開關,'ping'作爲cmd.exe的初始命令'執行,例如:'cmd.exe/K ping 192.168.0.1'。使用'%COMSPEC%'環境變量來獲取'cmd.exe'的完整路徑。 –

回答

0

如果問題是工藝窗口立即關閉,可能是你應該添加pause ......要能看到你的ping命令的結果..

現在,我絕不c++專家...但我建議,嘗試沿着下面的代碼行的東西...

CreateProcess( 
         "c:\\windows\\system32\\cmd.exe", 
         "/k ping 192.168.0.1 && pause && exit", 
         NULL, 
         NULL, 
         FALSE, 
         0, 
         NULL, 
         NULL, 
         &startupInfo,&processInfo); 
+0

爲什麼要用'&k'開關使用'&& pause && exit'? OP說「*等待用戶的下一個命令輸入*」,但是這個組合不允許輸入更多的用戶命令。自己使用'/ k'會。如果你只是要退出,你可以放棄'&& exit'並使用'/ c'而不是'/ k'。 –

+0

@RemyLebeau你可能是對的......我有點錯過了「下一個命令」部分...... – Plirkee

相關問題