thierryMCT89
Messages postés3Date d'inscriptionjeudi 20 décembre 2007StatutMembreDernière intervention26 décembre 2007
-
26 déc. 2007 à 11:47
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 2010
-
26 déc. 2007 à 16:50
Bonjour à tous,
Je tiens tout d'abord à dire que je suis plus que novice dans le VB...
J'ai une appli en VB qui permet de pinger une adresse IP public d'un serveur et qui m'envoi un mail et un SMS en cas de non réponse (cela fonctionne bien). J'ai fais une tâche planifié qui lance cette appli toutes les x minutes, jusque là tout va bien.
Donc si le routeur distant où ce trouve ce fameux serveur perd la connexion internet à un instant donné, l'appli va m'envoyer un mail et un SMS.
Le soucis est que vu que ma tâche planifié se répéte toutes les 5 minutes, si je n'ai pas rétabli la connexion internet du serveur distant dans les 5min, l'appli va refaire son test de ping et me renvoyer un mail et un SMS (à la limite le mial pas trop grave c'est gratuit mais le SMS ça peut revenir cher au bout d'un moement !).
Donc je voudrais que quand le ping ne répond pas l'appli m'envoi un 1er mail et SMS et qu'ensuite elle ne m'en envoi plus pendant x minutes...
Je pense déjà qu'il ne faut plus passer par le planificateur de tâches et donc programmer pour que mon appli fasse le test à intervalle régulier en temps et que si la requete ping echoue le ping ne s"execute plus pendant un temps donné...
J'éspere avoir été assez clair dans mes explications et que vous pourrez m'apportez vos suggestions.
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 20105 26 déc. 2007 à 12:06
salut
le plus simple pour toi, tout en gardant le principe de la tache planifiée, serait de stocker dans le dossier de l'appli un fichier
ini contenant la date et l'heure du dernier envoi de sms
ton Ini pourrait etre comme ci-dessous
[SMS]
LastAlertDate=26/12/2007
LastAlertTIME=17:47
Si le ping ne répond toujours pas, si le dernier sms envoyer est de moins de 10 min, par exemple, tu laisses l'envoi du mail se faire mais tu bloques l'envoi du sms.
Pourquoi un .INI, car en tant que novice en vb il te sera très simple d'utiliser les api GetPrivateProfileString pour lire le .INI
et WritePrivateProfileString
voilà
en espérant que tout cela t'apportera une petite aide
Pat
Don't Worry , Be Happy
<hr />lorsque le problème est résolu, pensez Réponse Acceptée
thierryMCT89
Messages postés3Date d'inscriptionjeudi 20 décembre 2007StatutMembreDernière intervention26 décembre 2007 26 déc. 2007 à 15:57
Merci de ta réponse.
Comme je l'ai dit je suis PLUS que novice, je ne suis pas du tout développeur, le code pour le ping et l'envoi de mail je l'ai recopié (et changé certaines valeurs et fonctions) mais je suis incapable de faire ce que tu m'a dit.
J'ai fais quelque recherche sur la lecture et l'écriture d'un fichier INI mais il y a aussi le soucis de comparer les dates et heures afin de lui dire que si inf. à 10min on ne renvoi pas de SMS et là ben je m'en sort pas !!!
A l'aide !!! (lol)
Merci beaucoup d'avance, je pense que c'est pas bien compliqué quand on connais un peu mais là je ne connais pas du tout le langage...
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 20105 26 déc. 2007 à 16:50
re salut
bon, c'est noel donc j'ai passé un peu de temps sur ton cas...
regardes le code ci dessous et teste le...
ensuites tu me diras
n'oublie pas de rajouter les déclarations des api en haut de ton module
'Déclaration des api de gestion du .ini
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As Any, ByVal lpString As String, ByVal lpFileName As String) As Boolean
Sub Main()
Dim sLastAlerteSMS As String
Dim lret As Long
Dim bSendSms As Boolean
strComputer = "."
objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
colPingedComputers = objWMIService.ExecQuery _
("Select * from Win32_PingStatus Where Address = 'Adresse_IP_Public'")
For Each objComputer In colPingedComputers
If objComputer.StatusCode = 0 Then
Else
'Je suppose que si on passe ici c'est que le ping n'a pas marché...
'Ci dessous le code pour l'envoi du mail... on le garde, car systématique
objEmail = CreateObject("CDO.Message")
objEmail.From = "Adresse_Mail_Expediteur"
objEmail.To = "Adresse_Mail_Destinataire"
objEmail.Subject = "Sujet_Du_Message"
objEmail.Textbody = "Corps_Du_Message"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"Serveur_SMTP"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
'ci dessous le code pour l'envoi du SMS
'c'est ici qu'on rajoute le controle lié au dernier envoi du sms
'Récupération de la derniere date et de la derniere heure d'envoi du sms
'initialisation des variables
sLastAlerteSMS = String(255, 0)
lret = GetPrivateProfileString("SMS", "LastAlert", "", sLastAlerteSMS, 255, App.Path & "\Sms.ini")
If lret <> 0 Then
'on a récupéré une valeur
sLastAlerteSMS = Left(sLastAlerteSMS, lret)
'test que l'interval (en minute) depuis le dernier sms est supérieur à 10
If DateDiff("n", Now, sLastAlerteSMS) > 10 Then
'l'envoi du dernier sms est vieux de plus de 10 minutes donc on en renvoie un
bSendSms = True
Else
'on a déjà envoyer un sms récemment , on ne va pas en renvoyer un ce coup ci
bSendSms = False
End If
Else
'le .ini n'existe pas ou bien il ne contient pas l'info recherchée donc on enverra un sms
bSendSms = True
End If
If bSendSms Then
'initialisation des valeurs du .ini pour la prochaine fois
lret = WritePrivateProfileString("SMS", "LastAlert", Now, App.Path & "\SMS.ini")
'Envoi du SMS
Shell ("explorer http://Adresse_Mail_Et_Parametres_Envoi_SMS ")
End If
End If
Next
End Sub
@+
Pat
Don't Worry , Be Happy
<hr />
lorsque le problème est résolu, pensez Réponse Acceptée