Ping rückgabewert per shellexecute
-
ich versuch das ping ergebnis per shellexecute aufzufangen (erfolgreich oder nicht)
int c = (int)ShellExecute(NULL,NULL,"ping 192.168.115.1",NULL,NULL,SW_NORMAL);
Bei grösser 36 war es bekanntlich erfolgreich, aber was
der Ping oder die AUsführung des Pings???
Und warum führt er den ping nicht aus? ist mein Syntax falsch??
-
ping.exe wurde dann wohl erfolgreich gestartet
-
aber warum seh ich die ausführung nicht??
gibt es den eine Möglichkeit den Errorlevel bzw das ergebniss des Pings direkt auszuwerten?
-
Warum lässt du eigentl. den zweiten Parameter leer ? ("open" ?)
ping doch einfach von deinem Programm aus:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-110869.html
-
Nachlesen in der MSDN ergibt folgendes:
Der Returncode liefert lediglich das Ergebnis der Versuchs das angegebene Programm
zu starten. Der Returncode des gestarteteten Programm wird nicht zurückgeliefert.
Das ist logisch auch nicht möglich da ShellExecute nach erfolgreichem Programmstart
ja wieder zum Aufrufer zurückkehrt und daher nichts über die "Zukunft" des Programms
wissen kann.Willst du irgendwelche Werte von dem aufgerufenen Programm zurückhaben dann musst
du wohl CreateProcess() verwenden.
-
Probiers mal damit bei uns funktionierts:
Es lohnt sich dazu die MSDN zu lesen/***********************************************************************.FA* .FUNCTION [ spawning to an external Programm ] -------------------------------------------------------------------------- .GROUP [ tool funktions ] .AUTHOR [ PAD ] -------------------------------------------------------------------------- .DESCRIPTION Aufrufen eines externen eigenständigen Programms ohne dass eine DosBox erscheint -------------------------------------------------------------------------- .PARAMETER IN char *Appname Name des programms welches gestartet werden soll char *Cmdline Übergabeparameter des Programms OUT CHANGED -------------------------------------------------------------------------- .RETURNVALUE dwexitcode Exit code des Processes -------------------------------------------------------------------------- .LOCAL_VARIABLES -------------------------------------------------------------------------- .GLOBAL_VARIABLES -------------------------------------------------------------------------- .FUNCTION_REFERENCES -------------------------------------------------------------------------- .HISTORY Date Author Comment 11.12.00 PAD /DDT Definition **********************************************************************.HE**/ #define LONGSTRINGLEN 512 + 1 unsigned long int SpawnWaitNoWindow(char *AppName,char *CmdLine) { TCHAR szCmdLine[LONGSTRINGLEN]; PROCESS_INFORMATION pi; STARTUPINFO si={sizeof(si)}; // da der erste Parameter gefüllt wird werden zumindest ab Visual C 5.0 alle anderen genullt unsigned long int dwExitCode; BOOL fSucess; // APPLTraceB(APPLV3,"SpawnWaitNoWindow") nur eine DebbuggingAusgabe sprintf(szCmdLine,"%s %s",AppName,CmdLine); fSucess=CreateProcess(AppName,szCmdLine,NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si ,&pi); if (fSucess) { CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess,INFINITE); GetExitCodeProcess(pi.hProcess,&dwExitCode); CloseHandle(pi.hProcess); } else { dwExitCode=0xFFFFFFFFL; } // APPLTraceEr(APPLV3,"SpawnWaitNoWindow",dwExitCode) nur eine DebbuggingAusgabe return dwExitCode; }