[R] Message réseau dans une MsgBox
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Message réseau dans une MsgBox
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
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.
Re: [..] Message réseau dans une MsgBox
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...
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
- walkson
- 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
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)
Pour le ou les clients
(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...
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
► Afficher le texte
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)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: [..] Message réseau dans une MsgBox
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
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
Re: [..] Message réseau dans une MsgBox
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...
- 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 !
- walkson
- 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
Bonjour,
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)
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 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.
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)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: [..] Message réseau dans une MsgBox
Bonjour,
En m'inspirant des scripts indiqués, j'ai écrit le script suivant (pour la partie émission) :
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
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
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
- walkson
- 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
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)
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)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: [..] Message réseau dans une MsgBox
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) :
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
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
Cordialement.
Papy46
Re: [..] Message réseau dans une MsgBox
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
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