Description du Code :
Le code AutoIt que nous présentons est un script d'application de surveillance de fenêtres. Son objectif est de permettre à l'utilisateur de surveiller un dossier spécifique et de recevoir des notifications personnalisées chaque fois qu'une fenêtre correspondante est activée. Voici un aperçu de ses principales fonctionnalités :
- Interface Graphique (GUI) : Le script crée une interface graphique conviviale en utilisant l'outil de conception Koda. Cette interface comprend les éléments suivants :
- Un champ d'affichage pour le chemin du dossier surveillé.
- Un bouton "Selectionnez le dossier à surveiller" pour choisir le dossier à surveiller.
- Un bouton "Start" pour activer ou désactiver la surveillance.
- Un champ de texte pour personnaliser le message de notification. - Fonctionnalités de Surveillance : Le script tire parti de la fonction [_WinAPI_RegisterShellHookWindow] pour activer la surveillance des événements de fenêtre. Lorsqu'un événement de redessinage ou d'activation de fenêtre se produit, le script réagit en conséquence.
- Personnalisation des Notifications : Les utilisateurs ont la possibilité de personnaliser le message de notification qui s'affichera lorsqu'une fenêtre correspondante est activée.
- Fermeture Propre : Le script a été conçu avec soin pour assurer une fermeture propre. Lorsque l'utilisateur ferme la fenêtre GUI, le script désactive la surveillance et se termine de manière appropriée.
Ce script d'application de surveillance de fenêtres est polyvalent et peut être utile dans divers scénarios, notamment :
- Surveillance de l'activité dans un dossier spécifique : Les utilisateurs peuvent sélectionner un dossier précis qu'ils souhaitent surveiller. À chaque activation d'une fenêtre correspondant à ce dossier, le script affiche une notification avec un message personnalisé. Cette fonction peut être utilisée pour suivre l'utilisation d'applications ou de fichiers spécifiques dans le dossier surveillé.
- Personnalisation des Notifications : L'application permet aux utilisateurs de personnaliser le message de notification. Cela s'avère pratique pour ajouter des informations contextuelles aux notifications, les rendant ainsi plus informatives.
- Contrôle de la Surveillance : Les utilisateurs ont la possibilité d'activer ou de désactiver la surveillance à l'aide du bouton "Start". Cela leur donne un contrôle total sur le moment où les notifications sont affichées.
- Fermeture Propre : Le script garantit une fermeture propre en désactivant la surveillance lorsque l'application est fermée. Cela prévient tout risque que la surveillance continue de s'exécuter en arrière-plan.
#include <APISysConstants.au3>
#include <WinAPISysWin.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPIFiles.au3>
;_WinAPI_DeregisterShellHookWindow($Form1)
OnAutoItExitRegister(OnAutoItExit)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("File Monitoring v1.0 by NUMERIC", 528, 207, 289, 124, -1, BitOR($WS_EX_APPWINDOW, $WS_EX_OVERLAPPEDWINDOW, $WS_EX_TRANSPARENT, $WS_EX_WINDOWEDGE, $WS_EX_COMPOSITED))
;GUISetBkColor(0xA10A101)
Global $lbDisplayFolderPath = GUICtrlCreateLabel("", 40, 16, 420, 17)
$Group1 = GUICtrlCreateGroup("Controles", 16, 72, 233, 105, -1, BitOR($WS_EX_TRANSPARENT, $WS_EX_CLIENTEDGE))
GUICtrlSetFont(-1, 10, 400, 0, "Myanmar Text")
Global $btChooseFolder = GUICtrlCreateButton("Selectionnez le dossier a surveiller", 24, 104, 211, 25, BitOR($BS_CENTER, $BS_VCENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetCursor(-1, 0)
Global $btStart = GUICtrlCreateButton("Start", 24, 144, 211, 25, BitOR($BS_CENTER, $BS_VCENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetCursor(-1, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$EditMessage = GUICtrlCreateInput("", 312, 92, 185, 20)
$Group2 = GUICtrlCreateGroup("Personnaliser le Message de Notification", 280, 68, 241, 57, -1, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 9, 800, 0, "Myanmar Text")
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUIRegisterMsg(0x000000000000C028, WM_SHELLHOOK)
GUIRegisterMsg($WM_COMMAND, WM_COMMAND)
Opt("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
While 1
Sleep(10)
WEnd
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $wParam
Local $iId = _WinAPI_LoWord($wParam)
If $iId == $btStart Then
If GUICtrlRead($EditMessage) <> "" Then
If GUICtrlRead($lbDisplayFolderPath) <> "" Then
If GUICtrlRead($btStart) == "Start" Then
_WinAPI_RegisterShellHookWindow($Form1)
GUICtrlSetData($btStart, "Stop")
Else
_WinAPI_DeregisterShellHookWindow($Form1)
GUICtrlSetData($btStart, "Start")
EndIf
Else
MsgBox(16, "Avertissement!", "Veuillez selectionner un dossier à surveiller!", 3)
EndIf
Else
MsgBox(16, 'Avertissement!', 'Veuillez personnaliser le message de notification!', 2)
EndIf
ElseIf $iId == $btChooseFolder Then
Local $filePath = FileSelectFolder("Choisir le dossier à surveiller", @ScriptDir)
If Not @error Or $filePath <> "" Then
_MemWrite($lbDisplayFolderPath, $filePath)
EndIf
EndIf
EndFunc ;==>WM_COMMAND
Func WM_SHELLHOOK($hWnd, $iMsg, $wParam, $lParam)
#forceref $iMsg
Local $sAction = ""
Switch $wParam
Case $HSHELL_REDRAW
$sAction = "Redessiné"
Case BitAND($wParam, $HSHELL_WINDOWACTIVATED) = $HSHELL_WINDOWACTIVATED
$sAction = "Activé"
EndSwitch
If WinGetTitle($lParam) == _WinAPI_GetFileTitle(GUICtrlRead($lbDisplayFolderPath)) And _WinAPI_GetFileTitle(GUICtrlRead($lbDisplayFolderPath)) <> "" Then
_WinAPI_CloseWindow(WinGetHandle(WinGetTitle($lParam)))
TrayTip("Notification", GUICtrlRead($EditMessage), 4000)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SHELLHOOK
Func OnAutoItExit()
_WinAPI_DeregisterShellHookWindow($Form1)
EndFunc ;==>OnAutoItExit
Func Quit()
GUIDelete($Form1)
Exit
EndFunc ;==>Quit
Func _MemWrite($iIDctrl, $sMsg)
GUICtrlSetData($iIDctrl, $sMsg)
EndFunc ;==>_MemWrite
#include <WinAPISysWin.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPIFiles.au3>
;_WinAPI_DeregisterShellHookWindow($Form1)
OnAutoItExitRegister(OnAutoItExit)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("File Monitoring v1.0 by NUMERIC", 528, 207, 289, 124, -1, BitOR($WS_EX_APPWINDOW, $WS_EX_OVERLAPPEDWINDOW, $WS_EX_TRANSPARENT, $WS_EX_WINDOWEDGE, $WS_EX_COMPOSITED))
;GUISetBkColor(0xA10A101)
Global $lbDisplayFolderPath = GUICtrlCreateLabel("", 40, 16, 420, 17)
$Group1 = GUICtrlCreateGroup("Controles", 16, 72, 233, 105, -1, BitOR($WS_EX_TRANSPARENT, $WS_EX_CLIENTEDGE))
GUICtrlSetFont(-1, 10, 400, 0, "Myanmar Text")
Global $btChooseFolder = GUICtrlCreateButton("Selectionnez le dossier a surveiller", 24, 104, 211, 25, BitOR($BS_CENTER, $BS_VCENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetCursor(-1, 0)
Global $btStart = GUICtrlCreateButton("Start", 24, 144, 211, 25, BitOR($BS_CENTER, $BS_VCENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetCursor(-1, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$EditMessage = GUICtrlCreateInput("", 312, 92, 185, 20)
$Group2 = GUICtrlCreateGroup("Personnaliser le Message de Notification", 280, 68, 241, 57, -1, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 9, 800, 0, "Myanmar Text")
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUIRegisterMsg(0x000000000000C028, WM_SHELLHOOK)
GUIRegisterMsg($WM_COMMAND, WM_COMMAND)
Opt("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
While 1
Sleep(10)
WEnd
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $wParam
Local $iId = _WinAPI_LoWord($wParam)
If $iId == $btStart Then
If GUICtrlRead($EditMessage) <> "" Then
If GUICtrlRead($lbDisplayFolderPath) <> "" Then
If GUICtrlRead($btStart) == "Start" Then
_WinAPI_RegisterShellHookWindow($Form1)
GUICtrlSetData($btStart, "Stop")
Else
_WinAPI_DeregisterShellHookWindow($Form1)
GUICtrlSetData($btStart, "Start")
EndIf
Else
MsgBox(16, "Avertissement!", "Veuillez selectionner un dossier à surveiller!", 3)
EndIf
Else
MsgBox(16, 'Avertissement!', 'Veuillez personnaliser le message de notification!', 2)
EndIf
ElseIf $iId == $btChooseFolder Then
Local $filePath = FileSelectFolder("Choisir le dossier à surveiller", @ScriptDir)
If Not @error Or $filePath <> "" Then
_MemWrite($lbDisplayFolderPath, $filePath)
EndIf
EndIf
EndFunc ;==>WM_COMMAND
Func WM_SHELLHOOK($hWnd, $iMsg, $wParam, $lParam)
#forceref $iMsg
Local $sAction = ""
Switch $wParam
Case $HSHELL_REDRAW
$sAction = "Redessiné"
Case BitAND($wParam, $HSHELL_WINDOWACTIVATED) = $HSHELL_WINDOWACTIVATED
$sAction = "Activé"
EndSwitch
If WinGetTitle($lParam) == _WinAPI_GetFileTitle(GUICtrlRead($lbDisplayFolderPath)) And _WinAPI_GetFileTitle(GUICtrlRead($lbDisplayFolderPath)) <> "" Then
_WinAPI_CloseWindow(WinGetHandle(WinGetTitle($lParam)))
TrayTip("Notification", GUICtrlRead($EditMessage), 4000)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SHELLHOOK
Func OnAutoItExit()
_WinAPI_DeregisterShellHookWindow($Form1)
EndFunc ;==>OnAutoItExit
Func Quit()
GUIDelete($Form1)
Exit
EndFunc ;==>Quit
Func _MemWrite($iIDctrl, $sMsg)
GUICtrlSetData($iIDctrl, $sMsg)
EndFunc ;==>_MemWrite