Page 1 sur 1

[PB4] Problème avec RunProgram [Oki]

Publié : ven. 08/sept./2006 20:59
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.

Publié : ven. 08/sept./2006 22:04
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

Publié : sam. 09/sept./2006 15:12
par TEALC
Merci beaucoup, sa marche nikel et comme je le voulais en plus.

Publié : lun. 16/oct./2006 14:00
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