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;
    }
    

    😃


Anmelden zum Antworten