#include-once
#include <GUIConstants.au3>

#region Global Variables and Constants
Global Const $WM_NCPAINT1  = 133     ; Message Rahmen neu zeichnen

Global Const $GWL_STYLE   = -16    ; Windowstyle mit GetWindowLong/SetWindowLong abfragen/setzen
Global Const $GWL_EXSTYLE = -20    ; erweiterter Windowstyle mit GetWindowLong/SetWindowLong abfragen/setzen
#endregion

#region Core functions
;===============================================================================
;
; Description:      Gibt die Fensterstile zurück
; Parameter(s):     $WinTitle  = Handle oder Titel des Fensters, das gelesen werden soll
;                   (optional) $WinText   = Text des Fensters, das gelesen werden soll
; Requirement(s):   keine
; Return Value(s):  bei Erfolg: Array{0] = Fensterstil
;                               Array[1] = erweiterter Fensterstil
;                   bei Fehler: Leerstring und @error = 1
; Author(s):        bernd670
;
;===============================================================================
Func _WinGetStyle($WinTitle, $WinText = "")
    Local $RetValue[2], $Temp, $h_window

    $h_window = $WinTitle
    If Not IsHWnd($h_window) Then
        $h_window = WinGetHandle($WinTitle, $WinText)
        If @error Then
            SetError(1)
            Return ""
        EndIf
    EndIf

    ; read Windowstyle
    $Temp = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $h_window, "long", $GWL_STYLE)
    If @error Then
        SetError(1)
        Return ""
    EndIf
    $RetValue[0] = $Temp[0]

    ; read extended Windowstyle
    $Temp = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $h_window, "long", $GWL_EXSTYLE)
    If @error Then
        SetError(1)
        Return ""
    EndIf
    $RetValue[1] = $Temp[0]

    SetError(0)
    Return $RetValue
EndFunc

;===============================================================================
;
; Description:      setzt die Fensterstile
; Parameter(s):     $WinTitle  = Handle oder Titel des Fensters, das gelesen werden soll
;                   (optional) $WinText   = Text des Fensters, das gelesen werden soll
;                   (optional) $Style     = Fensterstil (Standard = $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
;                   (optional) $ExStyle   = erweiterter Fensterstil (Standard = $WS_EX_APPWINDOW ,$WS_EX_WINDOWEDGE)
; Requirement(s):   keine
; Return Value(s):  bei Erfolg: 1
;                   bei Fehler: 0 und @error = 1
; Author(s):        bernd670
;
;===============================================================================
Func _WinSetStyle ($WinTitle, $WinText = "", $Style = -1, $ExStyle = -1)
    Local $h_window

    $h_window = $WinTitle
    If Not IsHWnd($h_window) Then
        $h_window = WinGetHandle($WinTitle, $WinText)
        If @error Then
            SetError(1)
            Return 0
        EndIf
    EndIf

    ; write Windowstyle
    If $Style = -1 Then $Style = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
    DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $h_window, "long", $GWL_STYLE, "long", $Style)
    If @error Then
        SetError(1)
        Return 0
    EndIf

    ; write extended Windowstyle
    If $ExStyle = -1 Then $ExStyle = BitOR($WS_EX_APPWINDOW ,$WS_EX_WINDOWEDGE)
    DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $h_window, "long", $GWL_EXSTYLE, "long", $ExStyle)
    If @error Then
        SetError(1)
        Return 0
    EndIf

    DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_window, "int", $WM_NCPAINT1, "int", 1, "int", 0)

    SetError(0)
    Return 1
EndFunc
#endregion