Page 1 sur 1
Savoir ce que retourne un programme MS-DOS
Publié : mer. 09/févr./2005 9:24
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 ?
Publié : mer. 09/févr./2005 12:40
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
Publié : mer. 09/févr./2005 14:04
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 ?
Publié : mer. 09/févr./2005 17:24
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)
Publié : jeu. 10/févr./2005 15:50
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)
Publié : jeu. 10/févr./2005 17:13
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.