#include <Constants.au3>
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
;~ #NoTrayIcon
Opt("GUIOnEventMode", 1)

Dim $Title, $OldTitle
Dim $song
Dim $hwnd

Global $h_Desktop_SysListView32
_GetDesktopHandle()

$hwnd = GUICreate("Zeit", 500,150, @DesktopWidth-500, @DesktopHeight-150-50, $WS_POPUP,  $WS_EX_TOOLWINDOW)
GUISetCursor(9)
GUISetOnEvent(-3,"_exit")
$context = GUICtrlCreateContextMenu()
GUICtrlCreateMenuItem("Exit",$context)
GUICtrlSetOnEvent(-1,"_exit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_Drag', $hwnd)
DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $hwnd, "hwnd", $h_Desktop_SysListView32)
GUISetState(@SW_SHOWNOACTIVATE, $hwnd)
GUISetBkColor(0xffffff)
GUISetState()
$sOldTime = ""
While 1
	$sTime = @HOUR&":"&@MIN&":"&@SEC
	If $sOldTime <> $sTime Then
		$sOldTime = $sTime
		$rgn = CreateTextRgn($hwnd, $sTime, 150, "Century Gothic", 600)
		SetWindowRgn($hwnd, $rgn)
	EndIf
	Sleep(200)
WEnd

Func _exit()
	Exit
EndFunc


Func SetWindowRgn($h_win, $rgn)
	DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $rgn, "int", 1)
EndFunc   ;==>SetWindowRgn

;Func CombineRgn(ByRef $rgn1, ByRef $rgn2)
;    DllCall("gdi32.dll", "long", "CombineRgn", "long", $rgn1, "long", $rgn1, "long", $rgn2, "int", 2)
;EndFunc
;~ ControlCommand
Func CreateTextRgn(ByRef $CTR_hwnd, $CTR_Text, $CTR_height, $CTR_font = "Microsoft Sans Serif", $CTR_weight = 800)
	Local Const $OUT_CHARACTER_PRECIS = 4
	Local Const $CLIP_DEFAULT_PRECIS = 4
	Local Const $PROOF_QUALITY = 4
	Local Const $FIXED_PITCH = 1
	Local Const $RGN_XOR = 3

;~ 	If $CTR_font = "" Then $CTR_font = "Microsoft Sans Serif"
	If $CTR_weight = -1 Then $CTR_weight = 1000
	Local $gdi_dll = DllOpen("gdi32.dll")
	Local $CTR_hDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $CTR_hwnd)
	Local $CTR_hMyFont = DllCall($gdi_dll, "hwnd", "CreateFont", "int", $CTR_height, "int", 0, "int", 0, "int", 0, _
			"int", $CTR_weight, "int", 0, "int", 0, "int", 0, "int", $ANSI_CHARSET, "int", $OUT_CHARACTER_PRECIS, _
			"int", $CLIP_DEFAULT_PRECIS, "int", $PROOF_QUALITY, "int", $FIXED_PITCH, "str", $CTR_font)
	Local $CTR_hOldFont = DllCall($gdi_dll, "hwnd", "SelectObject", "int", $CTR_hDC[0], "hwnd", $CTR_hMyFont[0])
	DllCall($gdi_dll, "int", "BeginPath", "int", $CTR_hDC[0])
	DllCall($gdi_dll, "int", "TextOut", "int", $CTR_hDC[0], "int", 0, "int", 0, "str", $CTR_Text, "int", StringLen($CTR_Text))
	DllCall($gdi_dll, "int", "EndPath", "int", $CTR_hDC[0])
	Local $CTR_hRgn1 = DllCall($gdi_dll, "hwnd", "PathToRegion", "int", $CTR_hDC[0])
	Local $CTR_rc = DllStructCreate("int;int;int;int")
	DllCall($gdi_dll, "int", "GetRgnBox", "hwnd", $CTR_hRgn1[0], "ptr", DllStructGetPtr($CTR_rc))
	Local $CTR_hRgn2 = DllCall($gdi_dll, "hwnd", "CreateRectRgnIndirect", "ptr", DllStructGetPtr($CTR_rc))
	DllCall($gdi_dll, "int", "CombineRgn", "hwnd", $CTR_hRgn2[0], "hwnd", $CTR_hRgn2[0], "hwnd", $CTR_hRgn1[0], "int", $RGN_XOR)
	DllCall($gdi_dll, "int", "DeleteObject", "hwnd", $CTR_hRgn1[0])
	DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $CTR_hwnd, "int", $CTR_hDC[0])
	DllCall($gdi_dll, "int", "SelectObject", "int", $CTR_hDC[0], "hwnd", $CTR_hOldFont[0])
	DllClose($gdi_dll)
	Return $CTR_hRgn2[0]
EndFunc   ;==>CreateTextRgn


Func _Drag()
    DllCall("user32.dll", 'int', _
            'SendMessage', 'hWnd', @GUI_WinHandle, _
            'int', 0x00A1, 'int', 2, 'int', 0)
EndFunc   ;==>_ChangeCursorOnDrag

Func _GetDesktopHandle()
    $h_Desktop_SysListView32 = 0

    Local Const $hDwmApiDll = DllOpen("dwmapi.dll")
    Local $sChkAero = DllStructCreate("int;")
    DllCall($hDwmApiDll, "int", "DwmIsCompositionEnabled", "ptr", DllStructGetPtr($sChkAero))
    Local $aero_on = DllStructGetData($sChkAero, 1)

    If Not $aero_on Then
        $h_Desktop_SysListView32 = WinGetHandle("Program Manager")
        Return 1
    Else
        Local $hCBReg = DllCallbackRegister("_GetDesktopHandle_EnumChildWinProc", "hwnd", "hwnd;lparam")
        If $hCBReg = 0 Then Return SetError(2)
        DllCall("user32.dll", "int", "EnumChildWindows", "hwnd", _WinAPI_GetDesktopWindow(), "ptr", DllCallbackGetPtr($hCBReg), "lparam", 101)
        Local $iErr = @error
        DllCallbackFree($hCBReg)
        If $iErr Then
            Return SetError(3, $iErr, "")
        EndIf
        Return 2
    EndIf
EndFunc   ;==>_GetDesktopHandle

Func _GetDesktopHandle_EnumChildWinProc($hWnd, $lParam)
    If _WinAPI_GetClassName($hWnd) = "SysListView32" And _WinAPI_GetWindowLong($hWnd, $GWL_ID) = 1 Then
        $h_Desktop_SysListView32 = $hWnd
        Return False
    EndIf
    Return True
EndFunc   ;==>_GetDesktopHandle_EnumChildWinProc