Savoir ce que retourne un programme MS-DOS

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Savoir ce que retourne un programme MS-DOS

Message par gansta93 »

Bonjour,

Par exemple je fais Net Send * Bonjourr.
Comment je peux savoir ce qu'a retourné mon net send tout en le faisant en runprogram() avec les options 1|2 ?
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Message par GG »

Bonjour,

Personnellement, je ferais ton net send redirigé (via >") dans un fichier que j'ouvrirai et analyserai par un readfile, findstring,readstring.

net send * toto >fichier.log
PureBasic 6.03 - Windows 11 22H2 (64 bits)
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

C'est vrai... je 'ny avait pas pensé.
Mais s'il y avait moyen d'éviter les fichier log... car par un RunProgram() je ne sais pas si le ">" fonctionera.

à tester.

Merci :-).
PS : l'editeur ne le fait-il pas pour récupérer l'erreur renvoyée par le compilateur ?
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

ça marche pas...
Voici juste le code du RunProgram().

Code : Tout sélectionner

  RunProgram("net", "send " + user$ + Chr(32) + Chr(34) + msg$ + Chr(34) + ">" + TmpFile$, "", 1 | 2)
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour à tous

Tu peux peut être tirer quelque chose de ce qui suit :

Code : Tout sélectionner


User.s="Toto"
Msg.s="Message"
TmpFile.s="c:\rep.txt"

OpenFile(1,"c:\net.bat")
Send.s=" Net send "+User.s+" "+Msg.s+" >"+TmpFile.s
WriteStringN(Send)
CloseFile(1)
RunProgram("net.bat","","", 1 | 2)
OpenFile(1,TmpFile)
Answer.s=ReadString()
CloseFile(1)
MessageRequester("Réponse ", Answer)

Denis

Bonne Jounée à tous
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

J'ai voulu éviter le batch, alors je suis passé par le DOS.

Code : Tout sélectionner

temp$=Space(255)
GetTempPath_(#Max_Path,@temp$)
TmpFile$=Space(#Max_Path)
GetTempFileName_(temp$,"NSGGPZ93",0,@TmpFile$)
Cmd$=Env("%comspec%")
  RunProgram(cmd$, "/c net send " + user$ + Chr(32) + Chr(34) + msg$ + Chr(34) + ">" + TmpFile$, "", 1 | 2)
If ReadFile(0,TmpFile$)
Len=Lof()
*buffer=AllocateMemory(Len)
If ReadData(*Buffer,Len)
NetMsg$=PeekS(*buffer)
NetMsg$=ReplaceString(NetMsg$,Chr(130),"é",1,1)
NetMsg$=ReplaceString(NetMsg$,Chr(133),"à",1,1)
Else
NetMsg$="Le fichier "+TmpFile$+" n'a pu être lu. Il est impossible de savoir si le message a bien été envoyé."
EndIf
  MessageRequester("Net Sand - Résultat", NetMsg$+#LFCR$+"Le message était :"+#LFCR$+#DQUOTE$+MSG$+#DQUOTE$, #MB_OK | #MB_IconAsterisk)
CloseFile(0)
FreeMemory(*buffer)
While DeleteFile(TmpFile$)=0:Delay(20):Wend
Else
MessageRequester("Erreur","Le fichier pour le résultat ("+TmpFile$+") n'a pas été créé. Il n'est donc pas possible de certifier que le message a bien été envoyé.",#MB_OK|#MB_IconStop)
EndIf
La procedure Env().

Code : Tout sélectionner

ProcedureDLL.s Env( EnvName$ ) ; Get an environment variable value.
   
   Result.s = ""
   
   Size.l = ExpandEnvironmentStrings_( EnvName$, #Null, #Null)
   
   If Size
      
      Result = Space(Size)
      ExpandEnvironmentStrings_( EnvName$, Result, Size)
      
   EndIf
   
   ProcedureReturn Result
   
EndProcedure
On récupère %comspec% comme ça on interprête sur le champ et on évite les batch qui ne s'effacent pas après.

Merci pour votre aide.
Répondre