LordTTSeven
asked on
Execute a Shell command silently and get the Output
Hello everyone,
I was looking for a way to execute a shell command (e.g. "ping localhost") without the user seeing a command shell(Win XP)
and recieve its output. Any ideas on that?
Thank you in advance,
Lord.
I was looking for a way to execute a shell command (e.g. "ping localhost") without the user seeing a command shell(Win XP)
and recieve its output. Any ideas on that?
Thank you in advance,
Lord.
You can use _popen to open the command as a FILE *, and then use the standard fgets/fscanf/etc. functions to read the result, then use _pclose to close the stream. Hope this helps.
Call ShellExecute() with the SW_HIDE flag. Or call CreateProcess() with the DETACHED_PROCESS flag.
ASKER
chensu:
I honestly dont get it how to recieve the Output here?
mnashadka:
This code:
#include <stdio.h>
void main(void) {
FILE* cons;
char s[999];
cons = _popen("ping localhost","r");
while(fscanf(cons,"%s",s))
printf("%s",s);
_pclose(cons);
scanf("%s",s);
}
Provides me this(excuse my german Windows)
C:\User\VC>shellexec
Pinglord2[127.0.0.1]mit32B ytesDaten: Antwortvon 127.0.0.1: Bytes=32Ze it<1msTTL= 128A
ntwortvon127.0.0.1:Bytes=3 2Zeit<1msT TL=128Antw ortvon127. 0.0.1:Byte s=32Zeit<1 msTT
L=128Antwortvon127.0.0.1:B ytes=32Zei t<1msTTL=1 28Ping-Sta tistikfür1 27.0.0.1:P aket
e:Gesendet=4,Empfangen=4,V erloren=0( 0%Verlust) ,Ca.Zeitan gabeninMil lisek.:Min imum
=0ms,Maximum=0ms,Mittelwer t=0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m s0ms0ms0ms 0ms0ms0ms0 ms0ms0ms0m s0ms0ms^C
It somehow does neither get CRLFs nor Spaces, and the last word(?) is repeatet untill i press CTRL+C...
Thank you, Lord.
I honestly dont get it how to recieve the Output here?
mnashadka:
This code:
#include <stdio.h>
void main(void) {
FILE* cons;
char s[999];
cons = _popen("ping localhost","r");
while(fscanf(cons,"%s",s))
printf("%s",s);
_pclose(cons);
scanf("%s",s);
}
Provides me this(excuse my german Windows)
C:\User\VC>shellexec
Pinglord2[127.0.0.1]mit32B
ntwortvon127.0.0.1:Bytes=3
L=128Antwortvon127.0.0.1:B
e:Gesendet=4,Empfangen=4,V
=0ms,Maximum=0ms,Mittelwer
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
s0ms0ms0ms0ms0ms0ms0ms0ms0
ms0ms0ms0ms0ms0ms0ms0ms0ms
0ms0ms0ms0ms0ms0ms0ms0ms0m
It somehow does neither get CRLFs nor Spaces, and the last word(?) is repeatet untill i press CTRL+C...
Thank you, Lord.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.