Wenn ich die Codes unten ausführen, erscheinen dos Fenster sofort und verschwinden dann. Was ich will ist, dass das Fenster bleibt und auf die nächste Befehlseingabe des Benutzers wartet. Was soll ich mit startupInfo.hStdInput tun, wenn ich Fenster zeigt behalten wollen, und ich habe Createprocess in meinem Projekt nicht die WinExec usw.Dos Fenster erscheint dann verschwindet sofort
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;
}
Warum führen Sie manuell so ein "Ping" aus, anstatt ['IcmpSendEcho()'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366050.aspx) zu verwenden ? –
Ich schreibe ein Projekt, das ich console über meine win32-Anwendung kontinuierlich Eingabe/Ausgabe möchte, so erwarte ich DOS-Fenster offen nach Code CreateProcess (NULL, Befehl, NULL, NULL, WAHR, NULL, NULL, NULL, & startupInfo, & processInfo) wird ausgeführt und wartet auf den nächsten Benutzerbefehl –
Das DOS-Fenster wird geschlossen, wenn der angegebene Befehl beendet wird. Da Ihr 'Befehl' nur' Ping' ist, wird das DOS-Fenster geschlossen, wenn 'Ping' beendet wird. Wenn Sie das DOS-Fenster nach dem Beenden von 'ping' geöffnet lassen möchten, müssen Sie 'cmd.exe' stattdessen mit dem angegebenen Kommandozeilenschalter'/K' und 'ping' als Initialbefehl für' cmd.exe ausführen 'auszuführen, zB:' cmd.exe/K ping 192.168.0.1'. Verwenden Sie die Umgebungsvariable '% COMSPEC% ', um den vollständigen Pfad zu' cmd.exe' zu erhalten. –