Page 2 sur 2

Re: Problème gestion évènement d'un buttongadget

Publié : mer. 19/mars/2014 14:24
par falsam
Tu ne peux pas utiliser tel quel ce que j'ai fait pour ton code. Le résultat renvoyé par les différents sites que tu consultes n'est pas formater de la même manière pour récupérer l'adresse ip publique d'un pc.

j'ai modifié ton code en conséquence.

Code : Tout sélectionner

;PureBasic 
;Basic Net tool 
;JmG49@2014

Enumeration 0 ; Id. Fenêtres
  #FENETRE1
EndEnumeration

Enumeration 0 ; Id. Gadgets
   #FEN1_GETIP
   #FEN1_SITE
   #FEN1_edit1
   #FEN1_edit2
   #FEN1_edit3
   #FEN1_edit4
EndEnumeration

Global Buffer.s

site0.s ="www.monip.org"
site1.s ="www.monip.fr"
site2.s ="www.monip.eu"
site3.s ="www.frameip.com"
site4.s ="www.hostip.fr"

InitNetwork()  

If OpenWindow(#FENETRE1, 320, 200, 570, 150, "PureBasic - Network Utility: IP Adresses (JmG@2014)", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(#FEN1_GETIP, 200, 10, 130, 20, "Get Ip")
  ButtonGadget(#FEN1_SITE, 10, 10, 170, 20, site0.s)
  StringGadget(#FEN1_edit1, 120, 40, 150, 20, "")
  StringGadget(#FEN1_edit2, 300, 40, 160, 20, "")
  StringGadget(#FEN1_edit3, 120, 80, 150, 20, "")
  StringGadget(#FEN1_edit4, 300, 80, 160, 20, "")
  TextGadget(#PB_Any, 10, 40, 100, 20, "Local IP Address")
  TextGadget(#PB_Any, 10, 80, 100, 20, "Wan IP Address")      
EndIf
    
Procedure.s GetWanIp(Site)   
  Protected File.l, IPPositionStart, IPPositionEnd
  
  ReceiveHTTPFile("http://"+GetGadgetText(#FEN1_SITE), "index.php")
  File=ReadFile(#PB_Any, "index.php")
  
  Buffer = ""
  If File
    While Eof(File)=0
      Buffer+ReadString(File)
    Wend
    
    ;Debug buffer
    
    Select Site 
      Case 0 ;www.monip.org
        IPPositionStart = FindString(Buffer, "IP :")+5
        IPPositionEnd   = FindString(Buffer, "<br>", IPPositionStart)
                
      Case 1 ;www.monip.fr (Pas de réception d'élément)
        
      Case 2 ;www.monip.eu  
        IPPositionStart = FindString(Buffer, "<span class="+Chr(34)+"Style1"+Chr(34)+">")+21
        IPPositionEnd   = FindString(Buffer, "</span>", IPPositionStart)
        
      Case 3 ;www.frameip.com
        IPPositionStart = FindString(Buffer, "<a href="+Chr(34)+"/mon-adresse-ip-internet/"+Chr(34)+">")+36
        IPPositionEnd   = FindString(Buffer, ":", IPPositionStart)
        
      Case 4 ;www.hostip.fr
        IPPositionStart = FindString(Buffer, "value=")+7
        IPPositionEnd   = FindString(Buffer, Chr(34), IPPositionStart)
        
    EndSelect
    
    Buffer=Trim(Mid(Buffer, IPPositionStart, IPPositionEnd-IPPositionStart))
        
    CloseFile(File)
  EndIf
  DeleteFile("index.php")
    
  ProcedureReturn Buffer
EndProcedure 

Procedure.s GetIp() 
  ExamineIPAddresses()  
  Result2 = NextIPAddress()
      
  ProcedureReturn IPString(Result2)
EndProcedure    
    
;-Boucle évenementielle  
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()  
          Case #FEN1_GETIP
            SetGadgetText(#FEN1_edit1, "")
            SetGadgetText(#FEN1_edit2, "")
            SetGadgetText(#FEN1_edit3, "")
            
            ;La procédure GetWanIp() doit connaitre le site qui est testé.
            SetGadgetText(#FEN1_edit3, GetWanIp(GetGadgetData(#FEN1_SITE))) 
                  
            GetIp()           
            SetGadgetText(#FEN1_edit1, GetIp())
            SetGadgetText(#FEN1_edit2, GetEnvironmentVariable("COMPUTERNAME"))      
            
          Case #FEN1_SITE
            Select GetGadgetData(#FEN1_SITE)  
              Case 4 
                SetGadgetText(#FEN1_SITE, site0.s)
                SetGadgetData(#FEN1_SITE, 0)
                      
              Case 0
                SetGadgetText(#FEN1_SITE, site1.s)
                SetGadgetData(#FEN1_SITE, 1)
   
              Case 1  
                SetGadgetText(#FEN1_SITE, site2.s)              
                SetGadgetData(#FEN1_SITE, 2)
                        
              Case 2  
                SetGadgetText(#FEN1_SITE, site3.s)               
                SetGadgetData(#FEN1_SITE, 3)
                        
              Case 3
                SetGadgetText(#FEN1_SITE, site4.s)
                SetGadgetData(#FEN1_SITE, 4)    
            EndSelect    
        EndSelect   ; end of test gadget events 
        
      Case #PB_Event_CloseWindow
        If MessageRequester("Dialog", "Do you really want to quit ?", #PB_MessageRequester_YesNo ) = #PB_MessageRequester_Yes
          End
        EndIf
        
    EndSelect       
ForEver   

Re: Problème gestion évènement d'un buttongadget

Publié : mer. 19/mars/2014 14:32
par jmg49
yeaaah !! superbe, étant donné que je suis au travail, je n'aurais pas pu parser tout ça avant cette nuit !!!!

merci pour la réorg du source , c'est bien plus clair et compréhensible maintenant,

si j'ai pas compris comment gérer les events avec ça !!! j'arrête tout !

edit :

terrible , un fois compressé , l'exe fait 22ko ! excellent !