PDA

View Full Version : [c][c++] eseguire il ping


fabiot
04-02-2004, 07:57
Salve a tutti. non conosco molto bene il c++,
sto comunque realizzando una applicazione a finestra di dialogo nella quale ci dovrebbe essere un pulsante che premuto deve scrivere su un file il risultato del comando ping.
Sotto dos farei "ping 127.0.0.1 > ping.txt"
Io avevo pensato di fare WinExec("ping 127.0.0.1 > ping.txt", SW_HIDE); ma non funziona.
chi mi può aiutare?

Grazie
Fbt

ps. ci sarebbe una funzione che eseguita restituisce ad esempio 0 se il ping non dà esito?

cionci
04-02-2004, 10:29
Per eseguirlo così:
ShellExecute(this->m_hWnd, "open","ping", "www.pippo.com", "C:\\", SW_HIDE);

Il problema è che non puoi redirigere l'output sul file, visto che non viene chiamato l'interprete dei comandi...
Al max potresti chiamare una file batch che contiene il comando con la redirezione...

fabiot
04-02-2004, 13:50
l'idea di fare un file batch è buona, non ci avevo pensato. Il fatto è che il file batch deve scrivere un file che poi userò nel programma.
Per scrivere il file impiega circa 4-5 secodi, quindi il programma principale si dovrebbe fermare un po' prima di cercare di accedere al file.
Come posso mettere "in pausa" il programma principale?

cionci
04-02-2004, 16:25
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = NULL;
shExecInfo.lpFile = "tuobatch.bat";
shExecInfo.lpParameters = "www.pippo.com output.txt";
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_HIDE;
shExecInfo.hInstApp = NULL;
if(!ShellExecuteEx(&shExecInfo))
{
AfxMessageBox("Errore nell'esecuzione !!!");
return;
}
WaitForSingleObject(shExecInfo.hProcess, INFINITE);