[PB4] Problème avec RunProgram [Oki]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
TEALC
Messages : 20
Inscription : ven. 13/févr./2004 0:43

[PB4] Problème avec RunProgram [Oki]

Message par TEALC »

Bonjour à tous

Voilà, avant de passer en PB4 mon script fonctionnait très bien, mais depuis il ne veut plus fonctionner correctement.

Code : Tout sélectionner

  If OpenFile(#tp,"temp.bat") 
    WriteStringN(#tp,"@echo OFF")
    WriteStringN(#tp,"ping L2authd.lineage2.com>ping.txt")
    CloseFile(#tp) 
    RunProgram("temp.bat", "", "", #PB_Program_Hide|#PB_Program_Wait)
    DeleteFile("temp.bat") 
  EndIf
Le problème vient de l'exécution du .bat, car si je l'exécute a par (je le lance manuellement) il crée bien le fichier ping.txt. La il ne s'exécute même plus en "invisible", il ouvre en fait une fenêtre dos et fait le ping "normal" j'ai donc l'impression que dans cette configuration il ne prend pas en compte le ">ping.txt", enfin a moitié car il crée le fichier mais ne le rempli pas.

Merci à tous de votre aide et j'espère avoir été clair.
Dernière modification par TEALC le sam. 09/sept./2006 15:13, modifié 1 fois.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Ce code ( Auteur originel = Marc ) pourrais t'être utile ?

Code : Tout sélectionner

ProcedureDLL IPNum(IPAdress.s) ; Return a numerical IP Adress from a IPString
  IpAddress.l=MakeIPAddress(Val(StringField(IPAdress,1,".")),Val(StringField(IPAdress,2,".")),Val(StringField(IPAdress,3,".")),Val(StringField(IPAdress,4,"."))) 
  ProcedureReturn IpAddress
EndProcedure

ProcedureDLL.s HostnameToIP(ConputerName.s) ; Return as a String
  If Len(ConputerName) > 0 
    ResultIP.s=""    
    high.b = 1: low.b = 1 
    Define wsaversion.w 
    PokeB(@wsaversion, high) 
    PokeB(@wsaversion + 1, low) 
    If WSAStartup_(wsaversion, wsa.WSADATA) = #NOERROR ; Try to access Windows sockets stuff... 
      *host.HOSTENT = gethostbyname_(ConputerName)       ; Get host information for named computer... 
      If *host <> #Null      
        While PeekL(*host\h_addr_list  + AdressNumber * 4) 
          IpAddress = PeekL(*host\h_addr_list  + AdressNumber * 4) 
          ResultIP = StrU(PeekB(IpAddress),0)+"."+StrU(PeekB(IpAddress+1),0)+"."+StrU(PeekB(IpAddress+2),0)+"."+StrU(PeekB(IpAddress+3),0) 
          AdressNumber + 1 
        Wend 
      EndIf 
      WSACleanup_() ; Close Windows sockets stuff... 
    EndIf 
    ProcedureReturn ResultIP 
  EndIf 
EndProcedure 

ProcedureDLL Ping(sIPAdress.s,TimeOut=500)
  ;/ Renvoie le temps en ms
  ;/ Renvoie -1 si hôte inaccessible
  ;/ Renvoie -2 si la résolution du nom de l'hôte en adresse Ip a échouée
  
  message.s="PING from PureBasic"
  
  ResultSize.l = SizeOf(ICMP_ECHO_REPLY) + Len(message) 
  *Result = AllocateMemory(ResultSize) 
  *Echo.ICMP_ECHO_REPLY = *Result 
  
  If Len(sIPAdress ) > 0 
    hFile.l = IcmpCreateFile_() 
    IpAddress.l=MakeIPAddress(Val(StringField(sIPAdress,1,".")),Val(StringField(sIPAdress,2,".")),Val(StringField(sIPAdress,3,".")),Val(StringField(sIPAdress,4,".")))  
    If IPAdresse = 0 
      sIPAdress = HostnameToIP(sIPAdress) 
      IpAddress.l=MakeIPAddress(Val(StringField(sIPAdress,1,".")),Val(StringField(sIPAdress,2,".")),Val(StringField(sIPAdress,3,".")),Val(StringField(sIPAdress,4,"."))) 
    EndIf 
    If IpAddress > 0 
      
      If IcmpSendEcho_(hFile, IpAddress, message, Len(message), 0, *Result, ResultSize, TimeOut) > 0                                
        ; PrintN("Ping " + sIPAdress + " Octets: " + Str(*Echo\DataSize) + " Temps: " + Str(*Echo\RoundTripTime) + " ms TTL:" + StrU(*Echo\Options\Ttl,#Byte)) 
      Else 
        ;/ Hôte inaccessible 
        FreeMemory(*Result)
        ProcedureReturn -1
      EndIf 
      
      IcmpCloseHandle_(hFile) 
    Else 
      ;/ Nom d'hôte introuvable / inrésolvable
      FreeMemory(*Result) 
      ProcedureReturn -2
    EndIf 
  EndIf 
  FreeMemory(*Result)
  
  ;/ Définition variables partagées
  PingTTL=*Echo\Options\Ttl & $000000FF ;/ Car résultat sur un octet
  
  ProcedureReturn *Echo\RoundTripTime
EndProcedure

Temps=Ping("www.voila.fr")

Select Temps
  Case -2
    MessageRequester("Ping","Echec résolution de noms")
  Case -1
    MessageRequester("Ping","Hôte injoignable")
  Default
    MessageRequester("Ping",Str(Temps)+" ms")
EndSelect
TEALC
Messages : 20
Inscription : ven. 13/févr./2004 0:43

Message par TEALC »

Merci beaucoup, sa marche nikel et comme je le voulais en plus.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

mais ça ne regle pas le problème du RunProgram.

J'ai le même problème avant la V4 ça fonctionnait mais maintenant ça ne fonctionne plus:
RunProgram("exe.bat", "", "", #PB_Program_Wait|#PB_Program_Hide)

si quelqu'un a une explication :P
Répondre