Affichage d'info-bulle - Prise en charge réseau

Partager vos scripts et fonctions intéressantes
Paneb
Posts: 54
Joined: 24 Aug 2015, 05:02
GitHub: PanebFR
Location: France

Affichage d'info-bulle - Prise en charge réseau

03 Nov 2016, 02:40

Bonjour à tous !
Je viens de voir en passant qu'une section pour nous français (enfin moi français, et les autres francophones :D) existe maintenant, je suis donc dans l'obligation de partager quelque chose :dance:.

Indépendamment des divers petits scripts qui peuvent me faciliter la vie, j'avais envie de poster celui qui suit.
Dans mon entreprise, nous avons des astuces/règles de bonne conduite à respecter.
Ce programme permet l'affichage de ces dernières sous forme d'info bulle au démarrage (une fois par jour).
De plus, il est modifié pour prendre en charge la connexion au serveur de l'entreprise est affiché les messages que la responsable souhaite afficher pour chaque personne (avec un système de gestion de priorité modifiant le timer.
Il y a donc un fichier configuration.paneb sur le réseau, mais qui est simplement un .ini (et comme j'avais pas envie de faire du cryptage de chaine de caractère j'ai juste modifié l'extension comme ce n'est pas critique :facepalm: .
Le code du script (j'ai enlevé les informations sur les chemins réseaux :shh: :

Code: Select all

/*
 * * * Compile_AHK SETTINGS BEGIN * * *

[AHK2EXE]
Exe_File=%In_Dir%\Pop_up.exe
[VERSION]
Set_Version_Info=1
Company_Name=Paneb Company
File_Description=Wazaa
File_Version=0.0.1.0
Inc_File_Version=1
Legal_Copyright=Paneb
[ICONS]
Icon_1=D:\Users\Paneb\Desktop\Ico_tray.ico
Icon_2=D:\Users\Paneb\Desktop\Ico_tray.ico
Icon_3=D:\Users\Paneb\Desktop\Ico_tray.ico
Icon_4=D:\Users\Paneb\Desktop\Ico_tray.ico
Icon_5=D:\Users\Paneb\Desktop\Ico_tray.ico

* * * Compile_AHK SETTINGS END * * *
*/

#SingleInstance force
#NoEnv
#Persistent
; #Warn
SendMode Input 
SetWorkingDir %A_ScriptDir%

;Pour désactiver le clic sur l'icone du programme (avant release)
;Menu, Tray, Nostandard													;<============= A DECOMMENTER AVANT RELEASE


Menu, Tray, Tip, Script pour afficher des pop-up réseaux!
; Rappel : Unité de sleep en milliseconde
; Sleep 1000 = 1 seconde


;Sleep  60000 ; On attend 60 secondes que les lecteurs réseaux soient connectés;<============= A DECOMMENTER AVANT RELEASE

;On initialise notre raccourci ainsi que les lecteurs
;La fonction lecteur envoie 1 si succès, 0 sinon

; Variables globales passées By Ref à nos fonctions

connecte := 0
alternat := 0
cheminTotal = ""
monTableauDAstuces:= []
init_Raccourci()
connecte := init_Lecteurs(cheminTotal)
init_Astuces(monTableauDAstuces)
affichage_Astuce(monTableauDAstuces)


;Les infos-bulles sont entourées de temporisation de 15 secondes avant et après leur apparition. Néanmoins les timers ne sont
;pas arrêtés par ces délais. C'est pour cela que le timing de l'info-bulle dédiée aux alerte est de 1 minute.
;Nota : les nombres des timers ne sont pas ronds pour évite dans la mesure du possible la "queue" des instructions exécutables.
;On règle le timer de la pop-up d'information qui affichera les différentes infos en cours successivement
;Pour test : 5000 (5 secondes)																			;<============= A DECOMMENTER AVANT RELEASE
;En exploitation du logiciel pour la pop-up info : 1800000 (30 minutes)
SetTimer, maPopUpInfo, 1800111

;Timer pour la pop-up alerte, qui doit donc être lue beaucoup plus souvent que les pop-up d'ordre général
;Pour test : 5000 (5 secondes)
;En exploitation du logiciel : 60000 (60 secondes)
SetTimer, maPopUpAlerte, 60239


;On déclenche un timer dont la valeur change en fonction de l'état des lecteurs réseaux (on vérifie moins souvent dans
;le cas où les lecteurs sont effectivement connectés).
;On vérifie tout de même de temps à autre
timerSettings:
	If(connecte = 0 && alternat = 1)
		{
			SetTimer, maVerification, 600000
		}
	Else
		SetTimer, maVerification, 1800000
	Return

maPopUpInfo:
	nouvellePopUp(cheminTotal)
	Return
maPopUpAlerte:
	popUpAlerte(cheminTotal)
	Return


maVerification:
	alternat = 0
	connecte := init_Lecteurs(cheminTotal)
	Goto timerSettings
	Return



/* DESCRIPTION DES FONCTIONS UTILISEES */
/*	Fonction ci-après utilisées pour le bon fonctionnement du programme :
	init_Raccourci() : utilisée pour créer dans le dossier de démarrage le raccourci nécessaire au lancement journalier du programme.
	init_Lecteurs(ByRef cheminTotal) : cette fonction permet de vérifier que nous sommes connectés aux lecteurs réseaux de l'entreprise, et
									   donc de s'assurer que nous pouvons lire les fichiers permettant de fonctionner correctement.
	nouvellePopUp(cheminTotal) : la fonction qui va lire notre fichier configuration.paneb afin d'afficher les différentes pop-up. Elle prend
								 en argument d'entrée la chaine de caractère menant au fichier contenant le contenu de ces fenêtres.
								 Cette info-bulle ne prendra pas en compte les pop-up alertes.
	popUpAlerte(cheminTotal) : affichera les alertes importantes. A utiliser avec discernement car la tempo est inférieur aux info-bulles normales.
	monAstuce(monTitre, monTexte, monIcone) : fonction permettant de générer la pop-up en elle-même. Ses arguments correspondent au titre de l'info-bulle,
											  à son contenu ainsi qu'à son icone (information, danger, erreur).
	init_Astuces(ByRef monTableauDAstuces) : fonction initialisant notre tableau d'Astuce qui affiche une info-bulle à chaque démarrage.
											 Hérité de la première version du programme. Ainsi même si le fichier de configuration
											 configuration.paneb est vide ou si les lecteurs sont déconnectés, le programme aura quand même une action à
											 effectuer.
	affichage_Astuce(monTableauDAstuces) : fonction qui permet de savoir si il faut afficher ou non une astuce (1 fois par jour). Elle lit donc un fichier
										   historique qu'elle couple à la date actuelle. De plus elle prend en argument le tableau défini en de manière statique
										   dans l'exécutable. Attention : elle supprime avant de recréer le fichier date, il pourrait y avoir des conflits sur des
										   postes aux autorisations restreintes.
*/

init_Raccourci(){
	StringTrimRight, Name, A_ScriptName, 3
	
	IfNotExist, %A_Startup%\%Name%lnk
		{
			If(A_IsCompiled = 1)
				FileCreateShortcut, %A_ScriptDir%\%Name%exe, %A_Startup%\%Name%lnk
			Else
				FileCreateShortcut, %A_ScriptDir%\%Name%ahk, %A_Startup%\%Name%lnk
		}
	Return
}

nouvellePopUp(cheminTotal){
	monTableauPonctuel := []
	monAnnee = %A_YYYY%
	monMois = %A_MM%
	monJour = %A_DD%
	maDateCompare = %A_DD%/%A_MM%/%A_YYYY%
	monAnneeIni = ""
	monMoisIni = ""
	monJourIni = ""
	global connecte
	confirmationDate = 0
	If(connecte != 0){
	Try
	{
		myVar =
		Loop, Read, %cheminTotal%
		{
			confirmationDate = 0
			If ((InStr(A_LoopReadLine, "[") = 0) AND StrLen(A_LoopReadLine) > 2)
			{
				Ans := InStr(A_LoopReadLine, "=")
				StringLeft, myVar, A_LoopReadLine, Ans - 1
				StringRight, Ans, A_LoopReadLine, StrLen(A_LoopReadLine) - Ans
				%myVar% := Ans
				tailleCle := StrLen(myVar)
				att := "Attention"
				If myVar is number
				{	
					StringRight, monAnneeIni, myVar, 4
					If(monAnneeIni>=monAnnee)
					{
						StringRight, monAnneeIni, myVar, 6
						StringLeft, monMoisIni, monAnneeIni, 2
						If(monMoisIni>=monMois)
						{
							StringLeft, monJourIni, myVar, 2
							If(monJourIni>=monJour)
								{
									monAstuce("Information entreprise", Ans,1)
									confirmationDate = 1
								}
						}
					}
				}
				If(confirmationDate = 0)
				{
					monPrenomNom := [Item1, Item2, Items3]
					
					monUser = %A_UserName%
					StringSplit, monPrenomNom, monUser, "."
					monPrenom := monPrenomNom1
					monNom := monPrenomNom2
					Ans := monPrenom . " : " . Ans
					If(monNom=myVar)
						monAstuce("Information personnel", Ans,1)
					Else if (att = myVar)
						monAstuce("N'oubliez pas !", Ans,2)
				}
			}
		}
	}
	catch e 
	{
		MsgBox, Une erreur pour lire le fichier s'est produit !`nPlus précisement : %e%
		Return
	}
	}
	Return
	
}

popUpAlerte(cheminTotal){

	monTableauPonctuel := []
	global connecte
	If(connecte != 0){
		Try
		{
			myVar =
			Loop, Read, %cheminTotal%
			{
				If ((InStr(A_LoopReadLine, "[") = 0) AND StrLen(A_LoopReadLine) > 2)
				{
					Ans := InStr(A_LoopReadLine, "=")
					StringLeft, myVar, A_LoopReadLine, Ans - 1
					StringRight, Ans, A_LoopReadLine, StrLen(A_LoopReadLine) - Ans
					%myVar% := Ans
					monPrenomNom := [Item1, Item2, Items3]
					monUser = %A_UserName%
					StringSplit, monPrenomNom, monUser, "."
					monPrenom := monPrenomNom1
					monNom := monPrenomNom2
					Ans := monPrenom . " : " . Ans
					att := "IMPORTANT"
					If (att = myVar)
						monAstuce("N'oubliez pas !", Ans,2)
				}
			}	
		}
		catch e 
		{
			MsgBox, Une erreur pour lire le fichier s'est produit !`nPlus précisement : %e%
			Return
		}
	}
	Return
}

init_Lecteurs(ByRef cheminTotal){
	DriveGet, drives, List, NETWORK
	global connecte
	global alternat
	tmp = %connecte%
	Loop, Parse, drives
	{
		lecteur=%A_LoopField%:\
		DriveGet, DriveLabel, Label, %lecteur%
		DriveGet, typeDisque, type, %lecteur%
		lecteur=%lecteur%Paneb\configuration.paneb
		IfExist, %lecteur%
		{
			connecte = 1
			If(tmp != connecte)
				alternat = 1
			If(alternat = 1)
				TrayTip, Info Paneb, Vous êtes connecté au serveur de l'entreprise, 15000 , 1
			cheminTotal = %lecteur%
			break
		}
		IfNotExist, %lecteur%
		{
			connecte = 0
			If(tmp != connecte)
				alternat = 1
		}
	}
	If(connecte=0 && alternat = 1)
		TrayTip, Info Paneb, Vous n'êtes pas connecté au serveur de l'entreprise, les info-bulles ne sont pas synchronisées, 15000 , 3
		
	Return connecte
}

monAstuce(monTitre,monTexte, monIcone){
	Sleep 15000
	TrayTip, %monTitre%, %monTexte%, 15000 , %monIcone%
	Sleep 15000
	return
}

init_Astuces(ByRef monTableauDAstuces){
	monTableauDAstuces:= ["Astuce 1 : Ceci est la 1", "Astuce 2 : Ceci est la 2.", "Astuce 3 : Ceci est la 3", "Astuce 4 : Ceci est la 4.", "Astuce 5 : Ceci est la 5."]
	monTableauDAstuces.Push("Sécurité : je vérifie la date de validité de mes EPI.")
	monTableauDAstuces.Push("Sécurité : et vous, tenez-vous votre engagement sécurité ?")
	monTableauDAstuces.Push("Véhicule : il est nécessaire de vérifier la pression des pneus une fois par mois.")
	monTableauDAstuces.Push("Véhicule : pensez à vérifier l'état d'usure de vos pneus pour éviter des problèmes de freinage.")
	monTableauDAstuces.Push("Véhicule : pensez à vérifier les niveaux une fois par mois (liquide de refroidissement, frein et huile).")
	monTableauDAstuces.Push("Véhicule : avez-vous les équipements obligatoires du code de la route ? Ethylotest, gilet de haute visibilité, triangle de signalisation.")
	Return
}

affichage_Astuce(monTableauDAstuces){

	DateTime += -Round( A_TickCount / 1000 ),S
	FormatTime, jour, %DateTime%, dd
	FileReadLine, ancienReboot, %A_ScriptDir%\ancienReboot.txt, 1
	If(jour != ancienReboot)
	{
		FileDelete, %A_ScriptDir%\ancienReboot.txt
		FileAppend, %jour%, %A_ScriptDir%\ancienReboot.txt
		If(A_WDay=2) or (A_WDay=3) or (A_WDay=4) or (A_WDay=5) or (A_WDay=6)
		{	
			Random, monAffichage, 1, monTableauDAstuces.MaxIndex()
			monTexte :=monTableauDAstuces[monAffichage]
			monAstuce("Astuce Paneb", monTexte,1)
		}
	}
	Return
}
Fichier de configuration :

Code: Select all

[SectionPersonne]
PANEB=Merci de rendre ton dossier sur ton integration.
FLUB=Il faut faire la révision.
[SectionQSE]
12022016=N'oubliez pas de vérifier vos équipements !
01012016=Bonne année à tous !
05022016=Bon week-end !
[SectionCompta]
08032016=Vos pointages sont dus rapidement...
[SectionMessagePeriodique]
IMPORTANT=On reste debouts !
Voilà !
Aucune idée si le concept peut ou non servir à quelqu'un, mais dans le doute je le laisse là :wave: .
User avatar
joedf
Posts: 6498
Joined: 29 Sep 2013, 17:08
Facebook: J0EDF
Google: +joedf
GitHub: joedf
Location: Canada, Quebec
Contact:

Re: Affichage d'info-bulle - Prise en charge réseau

03 Nov 2016, 11:13

Intéressant comme idée :+1:
Image Image Image Image Image
Windows 10 x64 Professional, Intel i5-8500 @ 3.00 GHz, 16GB DDR4 3200 MHz, NVIDIA GTX 1060 6GB | [About Me] | [ASPDM - StdLib Distribution]
[Populate the AHK MiniCity!] | [Qonsole - Quake-like console emulator] | [LibCon - Autohotkey Console Library] | [About the AHK Foundation]

Return to “Scripts et Fonctions”

Who is online

Users browsing this forum: No registered users and 1 guest