Enumeration
#String_0
#String_1
#String_2
#String_3
#String_4
#String_5
#String_6
#Button_0
#Text_0
#Text_1
#Text_2
#Text_3
#Text_4
#Text_5
#Text_6
#Button_2
#icone_actif
#icone_arret
#image_0
EndEnumeration
#INTERNET_SERVICE_FTP =1
#INTERNET_OPEN_TYPE_DIRECT =1
#FTP_PORT =21
#FTP_TRANSFER_ASCII =1
#FTP_TRANSFER_BINARY =2
Global Nom_Serveur.s,Nom_Utilisateur.s,Mot_De_Passe.s,Nom_Fichier_Local.s,Nom_Fichier_Distant.s,Frequence.s,Nom_Hote.s
Global freq.l , etat_prog.b ,adresse_ip.s , Memoire_adresse_ip.s
Procedure.s Encrypt(str.s)
; pour le codage du mot de passe ftp dans les prefs
DefType.l i, C
DefType.s tmp, erg
For i = 1
To Len (str)
tmp =
Mid (str, i, 1)
C =
Asc (tmp) + 15
If C > 255
C = C - 255
EndIf
erg = erg +
Chr (C)
Next
ProcedureReturn erg
EndProcedure
Procedure.s Decrypt(str.s)
DefType.l i, C
DefType.s tmp, erg
For i = 1
To Len (str)
tmp =
Mid (str, i, 1)
C =
Asc (tmp) - 15
If C < 0
C = C + 255
EndIf
erg = erg +
Chr (C)
Next
ProcedureReturn erg
EndProcedure
Procedure lecture_preference()
If OpenPreferences (
"dyn_ip.pref" )
Nom_Hote =
ReadPreferenceString (
"Nom_Hote" ,
"Erreur ! Pas de données ..." )
Nom_Serveur =
ReadPreferenceString (
"Nom_Serveur" ,
"Erreur ! Pas de données ..." )
Nom_Utilisateur =
ReadPreferenceString (
"Nom_Utilisateur" ,
"Erreur ! Pas de données ..." )
tempo.s =
ReadPreferenceString (
"Mot_De_Passe" ,
"Erreur ! Pas de données ..." )
Mot_De_Passe = Decrypt(tempo)
Nom_Fichier_Local =
ReadPreferenceString (
"Nom_Fichier_Local" ,
"Erreur ! Pas de données ..." )
Nom_Fichier_Distant =
ReadPreferenceString (
"Nom_Fichier_Distant" ,
"Erreur ! Pas de données ..." )
Frequence =
ReadPreferenceString (
"Frequence" ,
"Erreur ! Pas de données ..." )
freq =
Val (Frequence)
If freq = 0
freq = 60
Frequence =
"60"
EndIf
ClosePreferences ()
Else
MessageRequester (
" Erreur" ,
"Pas de fichier de Configuration : " +
Chr (34) +
" proto_dyn_ip.pref " +
Chr (34) +
"" ,
#MB_OK|#MB_ICONERROR )
EndIf
SetGadgetText (
#String_6 ,Nom_Hote)
; Remplissage des champs de la fenetre
SetGadgetText (
#String_0 ,Nom_Serveur)
SetGadgetText (
#String_1 ,Nom_Utilisateur)
SetGadgetText (
#String_2 ,Mot_De_Passe)
SetGadgetText (
#String_3 ,Nom_Fichier_Local)
SetGadgetText (
#String_4 ,Nom_Fichier_Distant)
SetGadgetText (
#String_5 ,Frequence)
EndProcedure
Procedure ecriture_preference()
If CreatePreferences (
"dyn_ip.pref" )
WritePreferenceString (
"Nom_Hote" ,
GetGadgetText (
#String_6 ))
WritePreferenceString (
"Nom_Serveur" ,
GetGadgetText (
#String_0 ))
WritePreferenceString (
"Nom_Utilisateur" ,
GetGadgetText (
#String_1 ))
tempo.s = Encrypt(
GetGadgetText (
#String_2 ))
; Encodage du mot de passe
WritePreferenceString (
"Mot_De_Passe" , tempo.s )
WritePreferenceString (
"Nom_Fichier_Local" ,
GetGadgetText (
#String_3 ))
WritePreferenceString (
"Nom_Fichier_Distant" ,
GetGadgetText (
#String_4 ))
entier.l =
Val (
GetGadgetText (
#String_5 ))
; Convertion du champ frequence en entier !
WritePreferenceString (
"Frequence" ,
Str (entier))
EndIf
EndProcedure
Procedure.s OpenURL(Url.s, OpenType.b)
isLoop.b=1
INET_RELOAD.l=$80000000
hInet.l=0: hURL.l=0: Bytes.l=0
Buffer.s=
Space (2048 )
hInet =
InternetOpen_ (
"PB@INET" , OpenType,
#Null ,
#Null , 0)
hURL =
InternetOpenUrl_ (hInet, Url,
#Null , 0, INET_RELOAD, 0)
Repeat
Delay (1)
InternetReadFile_ (hURL, @Buffer,
Len (Buffer), @Bytes)
If Bytes = 0
isLoop=0
Else
res.s = res +
Left (Buffer, Bytes)
EndIf
Until isLoop=0
InternetCloseHandle_ (hURL)
InternetCloseHandle_ (hInet)
ProcedureReturn res
EndProcedure
Procedure.s Recup_Ip()
URL$ =
"http://www.whatismyip.com/" ; Adresse http://www.whatismyip.com/ ou http://www.ipaddressworld.com
HTML$ = OpenURL(URL$, 1)
; Appel de la procedure OpenURL et enregistrement de la page dans HTML$
;OpenFile(1,"c:\sauv_page_ip.txt") ; Utile pour la mise au point du filtre de recherche de l'IP
;WriteString(HTML$)
;CloseFile(1)
debut =
FindString (HTML$,
"<TITLE>Your ip is" ,1) + 17
;
fin =
FindString (HTML$,
"WhatIsMyIP.com</TITLE>" ,1)
; Filtre pour trouver l'adresse ip dans la page html
ip$ =
Mid (HTML$,debut,(fin - debut))
; Attention filtre pour http://www.whatismyip.com/
; different si un autre site ! !
ProcedureReturn ip$
EndProcedure
Procedure Creation_Page_Perso(localfile.s,ip.s)
date$ =
FormatDate (
"%dd/%mm/%yyyy" ,
Date ())
; Creation et mise en forme de la chaine date$
heure$ =
FormatDate (
"%hh:%ii:%ss" ,
Date ())
; Creation et mise en forme de la chaine heure$
donnees$ =
"Adresse IP de " + Nom_Hote +
" est : " + ip +
" Mise à jour le :   " + date$ +
" à : " + heure$
HTML$=
"<html><head><title> Adresse IP </title></head><body><p>" + donnees$ +
"</p></body></html>"
OpenFile (1,localfile)
WriteString (HTML$)
CloseFile (1)
EndProcedure
Procedure.s Envoie_Ftp(Proxy.s,ProxyBypass.s,ServerName.s,UserName.s,Password.s,localfile.s,remotefile.s)
#INTERNET_SERVICE_FTP =1
#INTERNET_OPEN_TYPE_DIRECT =1
#FTP_PORT =21
#FTP_TRANSFER_ASCII =1
#FTP_TRANSFER_BINARY =2
hInternet=
InternetOpen_ (
"FTP" ,
#INTERNET_OPEN_TYPE_DIRECT ,Proxy,ProxyBypass,0)
If hInternet
hConnect=
InternetConnect_ (hInternet,ServerName,
#FTP_PORT ,UserName,Password,
#INTERNET_SERVICE_FTP ,0,0)
If hConnect
If FtpPutFile_ (hConnect,localfile,remotefile,
#FTP_TRANSFER_ASCII ,0)
;MessageRequester("","File has been sent",0)
message.s =
" Transfert du fichier OK !"
Else
;MessageRequester("Error", "Failure while sending file...",0)
message.s =
" Erreur, Probleme pendand l'envoie du fichier..."
EndIf
Else
;MessageRequester("Error", "Couldn't get a connection to the server!",0)
message.s =
" Erreur, Impossible de se connecter au serveur ftp..."
EndIf
InternetCloseHandle_ (hInternet)
Else
;MessageRequester("Error", "Internet isn't reachable.",0)
message.s =
" Erreur , Pas de connexion a internet ..."
EndIf
ProcedureReturn message
EndProcedure
Procedure mise_a_jour()
adresse_ip = Recup_Ip()
SysTrayIconToolTip(0,
"Ip Publique = " + adresse_ip)
SetWindowTitle (0,
"Actif ! freq = " +
Str (freq) +
" mn" +
" Ip Publique = " + adresse_ip)
If adresse_ip <> Memoire_adresse_ip
Creation_Page_Perso(Nom_Fichier_Local,adresse_ip)
Envoie_Ftp(
"" ,
"" ,Nom_Serveur,Nom_Utilisateur,Mot_De_Passe,Nom_Fichier_Local,Nom_Fichier_Distant)
Memoire_adresse_ip = adresse_ip
EndIf
EndProcedure
;-------------------------------------------- Début de Programme --------------------------------
id_icone_actif =
LoadImage (
#icone_actif ,
"icone_actif.ico" )
; Chargement des icones pour le systray
id_icone_arret =
LoadImage (
#icone_arret ,
"icone_arret.ico" )
;------------------------------------------ Creation de la fenetre ----------------------------
If OpenWindow (0, 346, 307, 364, 292,
#PB_Window_MinimizeGadget|#PB_Window_SystemMenu ,
"Dyn_IP" )
AddSysTrayIcon (0,
WindowID (),id_icone_arret )
SysTrayIconToolTip(0,
"Dyn_IP" )
If CreatePopupMenu (0)
MenuItem (1,
"Restaurer" )
EndIf
If CreateGadgetList (
WindowID ())
StringGadget (
#String_0 , 10, 40, 210, 20,
"" )
StringGadget (
#String_1 , 10, 70, 210, 20,
"" )
StringGadget (
#String_2 , 10, 100, 210, 20,
"" ,
#PB_String_Password )
;#PB_String_Password
StringGadget (
#String_3 , 10, 130, 210, 20,
"" )
StringGadget (
#String_4 , 10, 160, 210, 20,
"" )
StringGadget (
#String_5 , 10, 190, 210, 20,
"" )
StringGadget (
#String_6 , 10, 10, 210, 20,
"" )
ButtonGadget (
#Button_0 , 10, 220, 210, 40,
"Enregistrer" )
ButtonGadget (
#Button_2 , 230, 220, 120, 40,
"Démarrer" )
TextGadget (
#Text_0 , 240, 40, 130, 20,
"Adresse du serveur ftp" )
TextGadget (
#Text_1 , 240, 70, 100, 20,
"Nom d'utilisateur" )
TextGadget (
#Text_2 , 240, 100, 80, 20,
"Mot de passe" )
TextGadget (
#Text_3 , 240, 130, 120, 20,
"Nom du fichier local" )
TextGadget (
#Text_4 , 240, 160, 110, 20,
"Nom du fichier distant" )
TextGadget (
#Text_5 , 240, 190, 110, 20,
"freq mise à jour (mn)" )
TextGadget (
#Text_6 , 240, 10, 80, 20,
"Nom de l'hote" )
ImageGadget (
#image_0 ,320,2,32,32,id_icone_arret)
EndIf
If CreateMenu (1 ,
WindowID ())
MenuTitle (
"Menu" )
MenuItem (2,
" Quitter" )
EndIf
lecture_preference()
; Remplissage des champs de la fenetre
;- ------------------------------ Boucle de gestion des evenements --------------------------------
Repeat
Event =
WaitWindowEvent ()
Select Event
Case #PB_Event_SysTray
If EventType () =
#PB_EventType_RightClick
DisplayPopupMenu (0,
WindowID ())
If IsIconic_ (
WindowID (0))
;cette ligne est utilisée pour l'effet d'agrandissement
ShowWindow_ (
WindowID (0),
#SW_MINIMIZE )
;Une tempo est nécessaire sinon ça ne fonctionne pas à tous les coups
Delay (250)
ShowWindow_ (
WindowID (0),
#SW_RESTORE )
EndIf
EndIf
Case #WM_SIZE
If IsIconic_ (
WindowID (0))
ShowWindow_ (
WindowID (0),
#SW_HIDE )
EndIf
Case #PB_EventGadget
GadgetID =
EventGadgetID ()
If GadgetID =
#String_0
ElseIf GadgetID =
#String_1
ElseIf GadgetID =
#String_2
ElseIf GadgetID =
#String_3
ElseIf GadgetID =
#String_4
ElseIf GadgetID =
#Button_0 ; bouton Enregistrer
ecriture_preference()
lecture_preference()
ElseIf GadgetID =
#Button_2 ; Bouton démarrer
If GetGadgetText (
#Button_2 )=
"Démarrer"
SetGadgetText (
#Button_2 ,
"Arrêter" )
SetWindowTitle (0,
"Dyn_IP Actif ! freq = " +
Str (freq) +
" mn" )
ChangeSysTrayIcon (0,id_icone_actif)
ImageGadget (
#image_0 ,320,2,32,32,id_icone_actif)
lecture_preference()
mise_a_jour()
StartTimer(0,freq*60000,@mise_a_jour())
; Demarrage du Timer sur la procedure mise_a_jour
Else
EndTimer(0)
; Arret du Timer
SetGadgetText (
#Button_2 ,
"Démarrer" )
SetWindowTitle (0,
"Dyn_IP Arrêté !" )
ChangeSysTrayIcon (0,id_icone_arret)
ImageGadget (
#image_0 ,320,2,32,32,id_icone_arret)
EndIf
EndIf
Case #PB_EventMenu
menu_id =
EventMenuID ()
If menu_id = 2
End
EndIf
EndSelect
Until Event =
#PB_Event_CloseWindow
EndIf
End