[UDF] Time Notify

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 106
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

[UDF] Time Notify

#1

Message par Numeric » jeu. 25 mai 2017 16:00

Salut,
Je vous propose un model d'interaction de deux programmes afin de préserver le temps réel dans l"exécution de ceux ci...

Guide utilisateur :
1) Lancez d'abord le serveur...il n'y a aucune notification qui vous prévienne que le serveur est lancé...
2) Lancez le client...et attendez au moins une minute dans le cas de mon exemple pour voir la notification...et encore une minute de plus pour pour la revoir. :?
Remarque : (ces fonctions sont toujours en étude..et je vous proposerai un truc complet...)

Serveur
#include <Date.au3>
#include <WinAPI.au3>

HotKeySet("{ESC}", "_Exit")
;========================================================================================================================
;declaration globale
;========================================================================================================================
Global Const $IP_Adress = @IPAddress1, $iPort = 80, $iMax = 2
Global $Recv, $MainSOCKET, $Socket, $tagStruct
Global Const $tStruct = "struct;long heure;long min;long sec;long eache;hwnd win;long start;long toend;long top;endstruct"

If Not TCPStartup() Then
        _WinAPI_ShowError("Enabable to create ressource", True)
EndIf

$MainSOCKET = TCPListen($IP_Adress, $iPort, $iMax)

If $MainSOCKET = -1 Or $MainSOCKET = 0 Then
        TCPShutdown()
        _WinAPI_ShowError("Impossible de se connecter!")
EndIf


Do
        $Socket = TCPAccept($MainSOCKET)
        Sleep(20)
Until $Socket <> -1
;Creation de la structure pour gerer le client
;le serveur recevra les ordres à partir de cette structure.
$tagStruct = DllStructCreate($tStruct)
If @error Then
        _WinAPI_ShowError("Impossible de créer la structure", True)
EndIf


$Recv = TCPRecv($Socket, 9999);Entree des donnes
AdlibRegister("__sDataBase", 250);Requete de demande d'ordre
While 1
        Sleep(30)
WEnd

TCPCloseSocket($MainSOCKET)
TCPShutdown()






; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __sDataBase
; Description ...: Gere les données du client
; Syntax ........: __sDataBase()
; Parameters ....:
; Return values .: None
; Author ........: Numeric
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func __sDataBase()
        $Recv = TCPRecv($Socket, 9999)
        If StringInStr($Recv, "time") Then
                Local $GetALL = StringSplit($Recv, "|")
                DllStructSetData($tagStruct, "heure", $GetALL[2])
                DllStructSetData($tagStruct, "min", $GetALL[3])
                DllStructSetData($tagStruct, "sec", $GetALL[4])
                DllStructSetData($tagStruct, "eache", $GetALL[5])
                DllStructSetData($tagStruct, "win", $GetALL[6])
                DllStructSetData($tagStruct, "start", $GetALL[7])
                DllStructSetData($tagStruct, "toend", $GetALL[8])
                DllStructSetData($tagStruct, "top", $GetALL[9])
        EndIf
        If __TimeCompare($tagStruct) Then
                If IsNumber(DllStructGetData($tagStruct, "eache")) Then
                        Local $sNewDate = _DateAdd("n", DllStructGetData($tagStruct, "eache"), _NowCalc())
                        Local $GetTime = StringSplit($sNewDate, " ")[2]
                        Local $aPart = StringSplit($GetTime, ":")
                        DllStructSetData($tagStruct, "heure", $aPart[1])
                        DllStructSetData($tagStruct, "min", $aPart[2])
                        DllStructSetData($tagStruct, "sec", $aPart[3])
                EndIf
                __MoveWindow($tagStruct)
        EndIf
EndFunc   ;==>__sDataBase



; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __TimeCompare
; Description ...:  Compare les donnees du temps
; Syntax ........: __TimeCompare($tagStruct)
; Parameters ....: $tagStruct           - a structures definition.
; Return values .: True or false
; Author ........: Numeric
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __TimeCompare($tagStruct)
        If DllStructGetData($tagStruct, "heure") = @HOUR Then
                If DllStructGetData($tagStruct, "min") = @MIN Then
                        If DllStructGetData($tagStruct, "sec") = @SEC Then
                                Return True
                        EndIf
                EndIf
        EndIf
        Return False
EndFunc   ;==>__TimeCompare

Func _Exit()
        Exit
EndFunc   ;==>_Exit


; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __MoveWindow
; Description ...:  Déplace la fenetre...
; Syntax ........: __MoveWindow($DLL)
; Parameters ....: $DLL                 - an unknown value.
; Return values .: None
; Author ........: Numeric
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __MoveWindow($DLL)
        Local $toStart = DllStructGetData($tagStruct, "start")
        Local $toEnd = DllStructGetData($tagStruct, "toend")
        Local $WinHwnd = DllStructGetData($tagStruct, "win")
        Local $Top = DllStructGetData($tagStruct, "top")

        For $i = $toStart To $toEnd
                Sleep(10)
                WinMove($WinHwnd, "", $i, $Top)
        Next
        Sleep(300)
        For $j = $toEnd To $toStart Step -1
                Sleep(10)
                WinMove($WinHwnd, "", $j, $Top)
        Next
EndFunc   ;==>__MoveWindow

 
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric

Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 106
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: [UDF] Time Notify

#2

Message par Numeric » jeu. 25 mai 2017 16:39

Client
#include-once
#include <Date.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>


;========================================================================================================================================
;Declaration globale
;=======================================================================================================================================
Global Const $tagWindowGetState = 'struct;wchar uText[13];int uTextFont;int TimeLabelFont;bool RoundRect;int WinHeight;hwnd WinHandle;endstruct'
Global $__tn_ghWnd, $__tn_idLabel, $tWinSTATE_INFOS, $idLabel, $tnINITIAL_POS
Global $tnDEFAULT_FONT = 36
Global $tnDEFAULT_FONT_NAME = "Modern No. 20"
Global $Socket, $iPort = 80, $IP_Adress = @IPAddress1
;=======================================================================================================================================


#Region Exemple
Local $ToCreate = TimeNotifyCreate("Hello World!", Default, Default, Default)
TimeNotifySetFont(Default, Default)
TimeNotifySetRoundWin($ToCreate)
TimeNotifStart(@HOUR, @MIN + 1, 00, 1)
#EndRegion Exemple


; #FUNCTION# ====================================================================================================================
; Name ..........: TimeNotifyCreate
; Description ...: Cree et initialise la fenetre TimeNotify
; Syntax ........: TimeNotifyCreate([$sText = ""[, $iTransparency = Default[, $sTextColor = Default[, $bkColor = Default]]]])
; Parameters ....: $sText               - [optional] a string value. Default is "".
;                  $iTransparency       - [optional] an integer value. Default is Default.
;                  $sTextColor          - [optional] a string value. Default is Default.
;                  $bkColor             - [optional] a boolean value. Default is Default.
; Return values .: None
; Author ........: Numeric
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func TimeNotifyCreate($sText = "", $iTransparency = Default, $sTextColor = Default, $bkColor = Default)
        Local $LabelStyle = BitOR($SS_CENTER, $SS_CENTERIMAGE)
        $tWinSTATE_INFOS = DllStructCreate($tagWindowGetState)

        $__tn_ghWnd = GUICreate("", 319, 121, 0, 0, BitOR($WS_SYSMENU, $WS_POPUP), $WS_EX_TOPMOST)
        Local $aWinPos = WinGetPos($__tn_ghWnd)
        Local $Left = $aWinPos[0], $Top = $aWinPos[1], $Width = $aWinPos[2], $WinHeight = $aWinPos[3]
        $tnINITIAL_POS = DllStructCreate("struct;long Left;long Top;long Width;long Height;endstruct")
        DllStructSetData($tnINITIAL_POS, "Left", $Left)
        DllStructSetData($tnINITIAL_POS, "Top", $Top)
        DllStructSetData($tnINITIAL_POS, "Width", $Width)
        DllStructSetData($tnINITIAL_POS, "Height", $WinHeight)

        $__tn_idLabel = GUICtrlCreateLabel(_NowTime(), 0, 0, $Width, $WinHeight / 2, $LabelStyle)

        Local $_FirstCTRLHeight = $WinHeight / 2
        Local $_SecLabelHeight = $WinHeight - $_FirstCTRLHeight

        If Not StringLen($sText) Then
                $WinHeight = $_FirstCTRLHeight
        Else
                DllStructSetData($tWinSTATE_INFOS, "uText", $sText)
                Local $showText = getData("uText")
                $idLabel = GUICtrlCreateLabel($showText, $Left, $_FirstCTRLHeight, $Width, $_SecLabelHeight, $LabelStyle)

        EndIf
        DllStructSetData($tWinSTATE_INFOS, "WinHeight", $WinHeight)
        WinMove($__tn_ghWnd, "", $Left, $Top, $Width, $WinHeight)

        WinMove($__tn_ghWnd, "", $Left - $Width, $Top);Hide mode

        If $sTextColor = Default Or $sTextColor = "" Then $sTextColor = 0x0000FF
        GUICtrlSetColor($idLabel, $sTextColor)

        If $bkColor = Default Or $bkColor = "" Then $bkColor = 0xFF0000
        GUICtrlSetColor($__tn_idLabel, $bkColor)
        DllStructSetData($tWinSTATE_INFOS, "WinHandle", WinGetHandle($__tn_ghWnd))
        If $iTransparency = Default Then $iTransparency = 960
        If IsNumber($iTransparency) Then
                WinSetTrans($__tn_ghWnd, "", $iTransparency)
        EndIf
        HotKeySet("{ESC}", "_Exit")
        Return $__tn_ghWnd
EndFunc   ;==>TimeNotifyCreate

; #FUNCTION# ====================================================================================================================
; Name ..........: TimeNotifStart
; Description ...: Commence la notification...
; Syntax ........: TimeNotifStart([$H = @HOUR[, $Min = @MIN[, $Sec = @SEC[, $EachTime = 1]]]])
; Parameters ....: $H                   - [optional] an unknown value. Default is @HOUR.
;                  $Min                 - [optional] an unknown value. Default is @MIN.
;                  $Sec                 - [optional] an unknown value. Default is @SEC.
;                  $EachTime            - [optional] an unknown value. Default is 1.
; Return values .: None
; Author ........: Numeric
; Modified ......:
; Remarks .......: $EachTime defini la duree de temps que la fenetre prend avant de s'afficher
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func TimeNotifStart($H = @HOUR, $Min = @MIN, $Sec = @SEC, $EachTime = 1)
        If Not TCPStartup() Then
                _WinAPI_ShowError("Impossible de générer les ressources necessaires" & @CRLF & "Veuillez reessayer plus tard!", True)
        EndIf
        Local $getHwd = DllStructGetData($tWinSTATE_INFOS, "WinHandle")
        If Not IsHWnd($getHwd) Then
                _WinAPI_ShowError("Time notify must be created", True)
        EndIf
        $Socket = TCPConnect($IP_Adress, $iPort)
        If $Socket = -1 Or $Socket = 0 Then
                TCPShutdown()
                _WinAPI_ShowError("Impossible de se connecter!", True)
        EndIf
        MsgBox(48, "Client", "Connexion établie...", 1)
        Local $Left, $Top, $Width
        $Left = getData("Left", $tnINITIAL_POS)
        $Top = getData("Top", $tnINITIAL_POS)
        $Width = getData("Width", $tnINITIAL_POS)

        Local $Date = "time|" & $H & "|" & $Min & "|" & $Sec & "|" & $EachTime & "|" & $getHwd & "|" & ($Left - $Width) & "|" & $Left & "|" & $Top

        TCPSend($Socket, $Date)
        GUISetState(@SW_SHOW, $getHwd)
        AdlibRegister("NetRectInLabel", 250)

        While 1
                Sleep(5)
        WEnd
EndFunc   ;==>TimeNotifStart


; #FUNCTION# ====================================================================================================================
; Name ..........: TimeNotifySetFont
; Description ...: Definit la police et d'affichage du temps et de la notification
; Syntax ........: TimeNotifySetFont([$iSize = Default[, $sFontName = Default]])
; Parameters ....: $iSize               - [optional] an integer value. Default is Default.
;                  $sFontName           - [optional] a string value. Default is Default.
; Return values .: None
; Author ........: Numeric
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func TimeNotifySetFont($iSize = Default, $sFontName = Default)
        Local $s__Size
        If $iSize = Default Then $iSize = $tnDEFAULT_FONT
        If $sFontName = Default Then $sFontName = $tnDEFAULT_FONT_NAME

        If $iSize >= 30 Then
                $s__Size = $iSize - 10
        Else
                $s__Size = $iSize - 2
        EndIf
        GUICtrlSetFont($__tn_idLabel, $iSize, 400, 0, $sFontName)
        GUICtrlSetFont($idLabel, $s__Size, 400, 0, $sFontName)
        If IsDllStruct($tWinSTATE_INFOS) Then
                DllStructSetData($tWinSTATE_INFOS, "TimeLabelFont", $iSize)
        EndIf
EndFunc   ;==>TimeNotifySetFont


; #FUNCTION# ====================================================================================================================
; Name ..........: TimeNotifySetRoundWin
; Description ...: Permet d'avoir la fenetre ronde...
; Syntax ........: TimeNotifySetRoundWin($hWnd)
; Parameters ....: $hWnd                - a handle value.
; Return values .: None
; Author ........: Numeric
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func TimeNotifySetRoundWin($hWnd)
        If IsHWnd($__tn_ghWnd) Then
                $hWnd = $__tn_ghWnd
        Else
                $hWnd = WinGetHandle($hWnd)
        EndIf
        Local $hRgn = _WinAPI_CreateRoundRectRgn(0, 0, WinGetPos($hWnd)[2], WinGetPos($hWnd)[3], WinGetPos($hWnd)[2] / 3, WinGetPos($hWnd)[3] / 3)
        _WinAPI_SetWindowRgn($hWnd, $hRgn, True)
        _WinAPI_SelectObject($hWnd, $hRgn)
        _WinAPI_ReleaseDC($hWnd, $hRgn)
        If IsDllStruct($tWinSTATE_INFOS) Then
                DllStructSetData($tWinSTATE_INFOS, "RoundRect", True)
        EndIf
EndFunc   ;==>TimeNotifySetRoundWin

;================================================================================================================================
; fonctions internes
;================================================================================================================================
Func _Exit()
        Exit
EndFunc   ;==>_Exit

Func NetRectInLabel()
        GUICtrlSetData($__tn_idLabel, _NowTime())
EndFunc   ;==>NetRectInLabel

Func getData($DataName, $tSTRUCT = $tWinSTATE_INFOS)
        If IsDllStruct($tSTRUCT) Then
                Return DllStructGetData($tSTRUCT, $DataName)
        EndIf
EndFunc   ;==>getData
;================================================================================================================================
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric

Répondre