[R] Message réseau dans une MsgBox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
papy46
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 sept. 2015 20:58
Status : Hors ligne

[R] Message réseau dans une MsgBox

#1

Message par papy46 »

Bonjour,

Je suis à la recherche d'un script dont la fonction est décrite ci-dessous.

J'ai une application AutoIt qui fonctionne en continu sur les ordinateurs (en Win7) de mon réseau (l'application est fonctionnelle). Cette application permet d'accéder rapidement au portail intranet de la société. L'application est réduite dans la zone de notification. Je souhaiterai ajouter la fonctionnalité suivante à mon application : Affichage d'un message dans une MsgBox (envoi du texte et du type d’icône). Ce message serait envoyé par une application utilisée par le responsable du réseau. L'application qui envoie le message n'a pas besoin d'avoir une liste des PC du réseau, elle doit envoyer le message à tous les PC du réseau (on peut fixer une plage IP, exemple : 192.168.0.1 à 192.168.0.254) et ceux exécutant l'application afficheront le message.

En vous remerciant pour votre aide.

Cordialement.

Papy46
Modifié en dernier par papy46 le lun. 12 oct. 2015 08:56, modifié 1 fois.
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#2

Message par Hugues »

Bonjour,

J'ai peux-etre une solution... Une usine à gaz lol.

Pourquoi ne pas mettre un fichier texte sur un serveur. L'administrateur saisie le message qu'il veut afficher...

J'ai trouvé ce script sur le net qui contrôle si le fichier a été modifié. Sur ce script j'ai "greffé" une autre fonction qui va lire la dernière ligne du fichier txt pour l'afficher dans une MsgBox.

Ci joint le code, cela sera surement plus clair...
► Afficher le texte
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#3

Message par walkson »

Bonjour,
Peut être en utilisant le TCP
Le serveur se connecte en local et les clients se connectent à l'IP du serveur (ex: 192.168.1.xxx)
Pour le MsgBox, il suffit que le message reçu contienne le flag (ex: "48 attention virus en ligne") et de l'extraire du message e.g. MsgBox ( $flag, "title", $réceptionmessage)
Voici un exemple à adapter à vos besoins
Pour le serveur (à démarrer en premier)
► Afficher le texte
Pour le ou les clients
► Afficher le texte
(Coté serveur, à l'invite, tapez 48 et regardez en retour le MsgBox puis tapez un autre nombre)
Le code vient de http://www.autoitscript.fr/forum/viewto ... f=6&t=2464
Deux remarques: à la demande du client, c'est l'IP du serveur à rentrer (pas celui indiqué). s'assurer que le port est ouvert et inutilisé.
L'exemple ne correspond pas tout à fait à votre demande mais il est fonctionnel
En espérant que ce vous soit utile...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
papy46
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 sept. 2015 20:58
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#4

Message par papy46 »

Bonjour,

Merci de vos réponses. La seconde proposition correspond mieux à mon souhait. Il me faut retravailler la partie qui sera intégrée au portail afin de n'afficher qu'une MsgBox quand on reçoit un message. Et peut-être aussi prévoir une option pour que l'utilisateur puisse inhiber l'affichage du message.

Pour la partie qui va servir à envoyer le message, je pensai faire une boucle (for ?) qui va passer toutes les adresses IP comprises entre 192.168.0.1 et 192.168.0.254 (cela correspond à mon besoin). Si on peut se connecter, alors on envoie le message. Il me faudra aussi créer un fichier log afin de savoir quelles sont les adresses en échec et celles en réussites.

Si tout fonctionne, j'aurai atteint mon objectif :-)

Cordialement.

Papy46
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#5

Message par jguinch »

Perso, voilà comment je ferais :
- Un fichier PHP hébergé sur un serveur Web, qui permet de configurer la MsgBox et la liste des postes/IP concernés, je tout génère un fichier .txt (ou autre) - comment ça, un administrateur utilise une interface web, plutôt que le bloc-note pour modifier le fichier de config
- Sur les les postes clients s'exécute un programme en tâche de fond, qui télécharge à intervalles réguliers le fichier .txt. Une fois téléchargé, le fichier est analysé et la boite de dialogue s'affiche en fonction des critères (poste/IP/date-heure...)

Ca peut être un simple partage de fichiers à la place d'une url...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#6

Message par walkson »

Bonjour,
Pour la partie qui va servir à envoyer le message, je pensai faire une boucle (for ?) qui va passer toutes les adresses IP comprises entre 192.168.0.1 et 192.168.0.254 (cela correspond à mon besoin). Si on peut se connecter, alors on envoie le message. Il me faudra aussi créer un fichier log afin de savoir quelles sont les adresses en échec et celles en réussites.
La boucle est inutile car le serveur envoie son message à tout le monde et, seuls, les clients connectés sur le même port à l'adresse du serveur le reçoivent.
Pour connaitre ceux qui ont reçu le message, il y a la solution du retour, CAD le client qui a reçu le message envoie au serveur ses coordonnées.
En fait, le véritable problème de cette solution, est que si le client se connecte avant le serveur, il y a échec. Là, il faudrait une boucle pour vérifier la connexion. Il y a aussi le problème de ne pas recevoir sans cesse le même message...
Sauf erreur de ma part, il me semble que votre sujet a déjà été abordé sur le forum......
Il y a aussi http://autoitscript.fr/forum/viewtopic.php?f=21&t=13662 (il faut la version beta d'autoit)
Après, la solution de jguinch semble de loin la plus simple (mais je n'y connais rien en PHP)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
papy46
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 sept. 2015 20:58
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#7

Message par papy46 »

Bonjour,

En m'inspirant des scripts indiqués, j'ai écrit le script suivant (pour la partie émission) :

Code : Tout sélectionner

#NoTrayIcon

#include <MsgBoxConstants.au3>
#include <File.au3>
#include <Inet.au3>





; Déclaration des variables
$adresseIP_debut = "192.168.0."
$adresseIP = "192.168.0.1"





; InputBox pour saisir le message à envoyer
$message = InputBox("Envoi d'un message", "Votre message :", "", "", "", 130)





; Création du fichier log
$FileName = "LOG_" & @YEAR & @MON & @MDAY & "_" & @HOUR & @MIN & @SEC & ".log"
$hFileOpen = FileOpen($FileName, $FO_READ + $FO_OVERWRITE)
FileWrite($hFileOpen, "Fichier | " & $FileName & @CRLF)
FileWrite($hFileOpen, "Message | " & $message & @CRLF & @CRLF)
FileClose($hFileOpen)





; Départ du timer
$dTimer = TimerInit()

; Incrément pour adresse IP DHCP
For $i = 2 To 50 Step 1
    $adresseIP = $adresseIP_debut & $i
    envoi_message($adresseIP, $message, $FileName)
 Next

 ; Incrément pour adresse IP FIXE
For $i = 100 To 169 Step 1
    $adresseIP = $adresseIP_debut & $i
    envoi_message($adresseIP, $message, $FileName)
Next

; Fin du timer
$fDiff = TimerDiff($dTimer)





$hFileOpen = FileOpen($FileName, $FO_READ + $FO_APPEND)
FileWrite($hFileOpen, @CRLF & "Durée du traitement | " & Round(($fDiff/1000), 0) & " secondes" & @CRLF)
FileClose($hFileOpen)

MsgBox(64+262144, "Envoi d'un message", "     Envoi réalisé en " & Round(($fDiff/1000), 0) & " secondes")

Exit





; FONCTION ENVOI MESSAGE RESEAU (MSGBOX)
Func envoi_message($adresseIP, $message, $FileName)

   Local $ConnectedSocket, $szData, $recv, $flag
   Local $nPORT = 14584
   Local $yourIP = _GetIP()

   Opt("TCPTimeout", 100)

   If @error Then
      ; Ecriture ECHEC dans le fichier LOG
      $hFileOpen = FileOpen($FileName, $FO_READ + $FO_APPEND)
      FileWrite($hFileOpen, @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " | " & $adresseIP & " | Echec (1)" & @CRLF)
      FileClose($hFileOpen)

      TCPStartup()
   Else
      $szData = $message

      $ConnectedSocket = -1

      $ConnectedSocket = TCPConnect($adresseIP, $nPORT)
      TCPSend($ConnectedSocket, $yourip & "\" &$szData)

      If @error Then
         ; Ecriture ECHEC dans le fichier LOG
         $hFileOpen = FileOpen($FileName, $FO_READ + $FO_APPEND)
         FileWrite($hFileOpen, @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " | " & $adresseIP & " | Echec (2)" & @CRLF)
         FileClose($hFileOpen)
      Else
         ; Ecriture ENVOYE dans le fichier LOG
         $hFileOpen = FileOpen($FileName, $FO_READ + $FO_APPEND)
         FileWrite($hFileOpen, @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " | " & $adresseIP & " | Envoyé" & @CRLF)
         FileClose($hFileOpen)
      EndIf
   EndIf

EndFunc
Il fonctionne, mais il peut être trèèèèsss long : 1117 secondes pour envoyer un message de 2 mots à 119 PC ....

Comme la partie qui envoie le message n'est pas connectée en permanence, le serveur est dans le module qui reçoit le message (donc sur le poste de l'utilisateur). Ma boucle me permet de tester chaque adresse IP et d'envoyer le message. Je ne comprends pas pourquois c'est si long ?

Cordialement.

Papy46
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#8

Message par walkson »

Bonjour,
La lenteur vient peut être de "Local $yourIP = _GetIP()" qui vous retourne votre IP public en interrogeant le web.
Est ce vraiment utile de le faire alors que vous êtes sur un réseau interne ?
Mais je ne suis pas du tout un spécialiste dans ce domaine (je "gère" 3 PC espacés de 50 cm)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
papy46
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 sept. 2015 20:58
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#9

Message par papy46 »

Bonjour,

J'ai tenté l'expérience en utilisant le protocole UDP à la place du TCP et en m'inspirant de la doc AutoIt (https://www.autoitscript.com/autoit3/do ... DPSend.htm) :
► Afficher le texte
Pour tester les 254 adresses IP, il me faut environ 741 secondes soit à peu près 3 secondes pour déterminer si un PC est actif ou pas. Je trouve ça relativement long, mais je n'est pas suffisamment d'expérience dans les réseaux et leurs protocole pour être objectif.

Cordialement.

Papy46
papy46
Niveau 1
Niveau 1
Messages : 6
Enregistré le : mer. 30 sept. 2015 20:58
Status : Hors ligne

Re: [..] Message réseau dans une MsgBox

#10

Message par papy46 »

Bonjour,

Le problème a l'air d'être résolu en utilisant la fonction PING, si ça répond alors j'envoie le message sinon je passe à l'adresse suivante. Je suis aussi resté sur le protocole UDP qui répond à mon besoin.

Cordialement.

Papy46
Répondre