Autre Truc bizarre ! [Newby]

Autre Truc bizarre ! [Newby] - Delphi/Pascal - Programmation

Marsh Posté le 14-04-2003 à 16:58:31    

Pourquoi est ce que la fonction suivante

Code :
  1. function IsOnline(koi:string):boolean;
  2. var
  3.   ShExecInfo : SHELLEXECUTEINFO;
  4.   params:string;
  5.   outchem:string;
  6. begin
  7.   outchem:='c:\test.txt';
  8.   params:= koi + ' -l 1 -n 1 > ' + outchem;
  9.   ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  10.   ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  11.   ShExecInfo.lpVerb := nil;
  12.   ShExecInfo.lpFile := PChar('ping.exe');
  13.   ShExecInfo.lpParameters := PChar(params);
  14.   ShExecInfo.lpDirectory := nil;
  15.   ShExecInfo.nShow := SW_HIDE;
  16.   ShellExecuteEx(@ShExecInfo);
  17.   while (WaitForSingleObject(ShExecInfo.hProcess,0)=WAIT_TIMEOUT) do
  18.     application.ProcessMessages;
  19.   IsOnline:=true;
  20. end;


 
Ne me crée elle pas le fichier 'c:\test.txt' en y exportant le résultat de "ping" ? (alors que sous DOS ça marche sans pb...)


Message édité par Kyle_Katarn le 14-04-2003 à 20:03:21
Reply

Marsh Posté le 14-04-2003 à 16:58:31   

Reply

Marsh Posté le 14-04-2003 à 17:50:59    

je ne pense pas que le ">" pour faire une redirection fonctionne avec un ShellExecute...
 
Si c'est juste pour voir si un serveur répond y a probablement plus propre :D  par ex le compo TIdIcmpClient dans la palette Indy Client, je crois.


Message édité par antp le 14-04-2003 à 17:52:07

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-04-2003 à 19:10:07    

C'est marrant que ça marche pas...  
 
Ok pour le compo, je débute donc je suis reconnaissant pour ce genre de conseil de modo avisé ;-)

Reply

Marsh Posté le 14-04-2003 à 20:02:42    

J'utilise maintenant le code suivant, où ping est le composant que tu m'as indiqué.
 
Quand je "pingue" une machine qui n'est pas connectée, je me paye une exception EIdSocketError qui me dit que l'hôte n'est pas trouvé. Pourquoi le try...except suivant ne résoud pas le problème ?
 

Code :
  1. function IsOnline(koi:string):boolean;
  2. begin
  3.   Form1.ping.Host:=koi;
  4.   Form1.ping.ReceiveTimeout:=500;
  5.   try
  6.     Form1.ping.Ping;
  7.     IsOnline:=(Form1.ping.ReplyStatus.ReplyStatusType=rsEcho);
  8.   except
  9.      on EIdSocketError do IsOnline:=false;
  10.   end;
  11. end;

Reply

Marsh Posté le 14-04-2003 à 20:26:46    

Peut-être parce que la fonction Ping n'est pas bloquante ? Y a pas on OnError pour lequel il faut mettre le code à 0 si on ne veut pas que l'erreur survienne ? J'ai pas la doc d'Indy sous la main.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-04-2003 à 22:05:19    

merci, je vais regarder de ce coté !

Reply

Marsh Posté le 17-04-2003 à 12:50:58    

antp a écrit :

je ne pense pas que le ">" pour faire une redirection fonctionne avec un ShellExecute...
 
Si c'est juste pour voir si un serveur répond y a probablement plus propre :D  par ex le compo TIdIcmpClient dans la palette Indy Client, je crois.


 
Je confirme, le > est une commande specifique au dos, et ne peut donc etre utilisee dans du delphi ou autre language de prog d'ailleurs.

Reply

Marsh Posté le 17-04-2003 à 13:25:57    

même en tant que paramètre ? bizarre.

Reply

Marsh Posté le 17-04-2003 à 14:30:19    

y a moyen, suffit d'exécuter
 
cmd /c ping ip > fichier  
sous NT
 
command /c ping ip > fichier
sous 9x
 
Mais bon passer par ping pour voir si un serveur est online c'est pas ce qu'il y a de mieux ;)


Message édité par antp le 17-04-2003 à 14:30:45

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-04-2003 à 16:19:56    

Finalement j'ai adopté l'ICMP plus "propre" comme méthode ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed