GUi Style Analyse-Tool gesucht .

    • Offizieller Beitrag

    Hab da ein kleines Problem.

    Gibt es irgendein Tool , das aus den kombinierten Styles und ExStyles der GUI wieder die Einzelnen Styles ausgiebt.
    Also z.B. Style 0x96CF004C und ExStyle 0x00010108 bestehen aus welchen Styles und ExStyles ? Am besten wäre ein Tool , das nicht auf die Styles von Autoit beschränkt ist .
    Am besten mit Konstantennamen und den zugehörigen Werten.
    Habe z.B. versucht mit dem normalen Syles von Autoit eine GUI hinzubekommen, die beim resizen nicht oder wenig flackert.
    Dies war nicht von Erfolg gekrönt .
    Die o.G. Styles habe ich aus dem Taskmanager, per Autoit Window Info rausgefunden . Bei diesen Styles flacker die GUI fast garnicht mehr.
    Auch das Listview flackert nicht mehr, wie bei $WS_EX_COMPOSITED .
    Kann sein das ich jetzt im falschen Unterforum gepostet habe, wenn ja bitte verschieben.

    Danke schonmal fürs Helfen .

    PS: Bitte nicht mit irgendwelchen Hexrechenaufgaben kommen, ich bin eine absolute Hex-Niete 8| Edit oder doch, bin ja lernwillig . :)

    Edit : Jetzt werd ich garnichtmehr schlau aus den Styles von Windows .

    [autoit]

    Global Const $WS_TILED = 0
    Global Const $WS_OVERLAPPED = 0
    Global Const $WS_MAXIMIZEBOX = 0x00010000
    Global Const $WS_MINIMIZEBOX = 0x00020000
    Global Const $WS_TABSTOP = 0x00010000
    Global Const $WS_GROUP = 0x00020000
    Global Const $WS_SIZEBOX = 0x00040000
    Global Const $WS_THICKFRAME = 0x00040000
    Global Const $WS_SYSMENU = 0x00080000
    Global Const $WS_HSCROLL = 0x00100000
    Global Const $WS_VSCROLL = 0x00200000
    Global Const $WS_DLGFRAME = 0x00400000
    Global Const $WS_BORDER = 0x00800000
    Global Const $WS_CAPTION = 0x00C00000
    Global Const $WS_OVERLAPPEDWINDOW = 0x00CF0000
    Global Const $WS_TILEDWINDOW = 0x00CF0000
    Global Const $WS_MAXIMIZE = 0x01000000
    Global Const $WS_CLIPCHILDREN = 0x02000000
    Global Const $WS_CLIPSIBLINGS = 0x04000000
    Global Const $WS_DISABLED = 0x08000000
    Global Const $WS_VISIBLE = 0x10000000
    Global Const $WS_MINIMIZE = 0x20000000
    Global Const $WS_CHILD = 0x40000000
    Global Const $WS_POPUP = 0x80000000
    Global Const $WS_POPUPWINDOW = 0x80880000

    [/autoit]


    Warum haben einige Styles den gleichen Wert ? Hat das was mit der abhängkeit zueinander zu tun ? Also ein gewisser Style schließt den andern aus ?
    Jetz bin ich vollkommend Ratlos .

  • Hab dir mal was zusammengestellt :rock: Du kannst es ja noch erweitern, hab jetzt nur schnell die Autoit-Styles eingebunden.

    Das müsste jetzt eigentlich unter Skripte ;)
    [autoit]

    #include <Array.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $WS_EX_COMPOSITED = 0x02000000
    GUICreate('Style-Test von funkey', 100, 100, -1, -1, BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_COMPOSITED, $WS_EX_TOPMOST))

    [/autoit] [autoit][/autoit] [autoit]

    $Style = _WinGetStyle('Style-Test von funkey')
    _ArrayDisplay($Style, 'Gesamt-Style')
    MsgBox(0, "Styles", _WinStyle2Text($Style[0]))
    MsgBox(0, "Styles", _WinExStyle2Text($Style[1]))

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinStyle2Text($iStyle)
    ; funkey
    Local $sReturn
    Local $aStyles[23][2] = [['$WS_MAXIMIZEBOX', 0x00010000], _
    ['$WS_MINIMIZEBOX', 0x00020000], _
    ['$WS_TABSTOP', 0x00010000], _
    ['$WS_GROUP', 0x00020000], _
    ['$WS_SIZEBOX', 0x00040000], _
    ['$WS_THICKFRAME', 0x00040000], _
    ['$WS_SYSMENU', 0x00080000], _
    ['$WS_HSCROLL', 0x00100000], _
    ['$WS_VSCROLL', 0x00200000], _
    ['$WS_DLGFRAME', 0x00400000], _
    ['$WS_BORDER', 0x00800000], _
    ['$WS_CAPTION', 0x00C00000], _
    ['$WS_OVERLAPPEDWINDOW', 0x00CF0000], _
    ['$WS_TILEDWINDOW', 0x00CF0000], _
    ['$WS_MAXIMIZE', 0x01000000], _
    ['$WS_CLIPCHILDREN', 0x02000000], _
    ['$WS_CLIPSIBLINGS', 0x04000000], _
    ['$WS_DISABLED', 0x08000000], _
    ['$WS_VISIBLE', 0x10000000], _
    ['$WS_MINIMIZE', 0x20000000], _
    ['$WS_CHILD', 0x40000000], _
    ['$WS_POPUP', 0x80000000], _
    ['$WS_POPUPWINDOW', 0x80880000]]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aStyles, 1) - 1
    If BitAND($iStyle, $aStyles[$i][1]) = $aStyles[$i][1] Then $sReturn &= $aStyles[$i][0] & @CRLF
    Next
    Return $sReturn
    EndFunc ;==>_WinStyle2Text

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinExStyle2Text($iStyle)
    ; funkey
    Local $sReturn
    Local $aExStyles[16][2] = [['$WS_EX_ACCEPTFILES', 0x00000010], _
    ['$WS_EX_MDICHILD', 0x00000040], _
    ['$WS_EX_APPWINDOW', 0x00040000], _
    ['$WS_EX_CLIENTEDGE', 0x00000200], _
    ['$WS_EX_CONTEXTHELP', 0x00000400], _
    ['$WS_EX_DLGMODALFRAME', 0x00000001], _
    ['$WS_EX_LEFTSCROLLBAR', 0x00004000], _
    ['$WS_EX_OVERLAPPEDWINDOW', 0x00000300], _
    ['$WS_EX_RIGHT', 0x00001000], _
    ['$WS_EX_STATICEDGE', 0x00020000], _
    ['$WS_EX_TOOLWINDOW', 0x00000080], _
    ['$WS_EX_TOPMOST', 0x00000008], _
    ['$WS_EX_TRANSPARENT', 0x00000020], _
    ['$WS_EX_WINDOWEDGE', 0x00000100], _
    ['$WS_EX_LAYERED', 0x00080000], _
    ['$WS_EX_COMPOSITED', 0x02000000]]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aExStyles, 1) - 1
    If BitAND($iStyle, $aExStyles[$i][1]) = $aExStyles[$i][1] Then $sReturn &= $aExStyles[$i][0] & @CRLF
    Next
    Return $sReturn
    EndFunc ;==>_WinExStyle2Text

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinGetStyle($WinTitle, $WinText = "")
    ; modified by funkey
    Local $RetValue[2], $Temp, $h_window

    [/autoit] [autoit][/autoit] [autoit]

    $h_window = $WinTitle
    If Not IsHWnd($h_window) Then
    $h_window = WinGetHandle($WinTitle, $WinText)
    If @error Then Return SetError(1, 0, "")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; read Windowstyle
    $Temp = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $h_window, "long", $GWL_STYLE)
    If @error Then SetError(2, 0, "")
    $RetValue[0] = '0x' & StringFormat('%008s', Hex($Temp[0]))

    [/autoit] [autoit][/autoit] [autoit]

    ; read extended Windowstyle
    $Temp = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $h_window, "long", $GWL_EXSTYLE)
    If @error Then SetError(3, 0, "")
    $RetValue[1] = '0x' & StringFormat('%008s', Hex($Temp[0]))
    Return $RetValue
    EndFunc ;==>_WinGetStyle

    [/autoit]
    • Offizieller Beitrag

    funkey , sieht fürst erste schonmal gut aus :) Bin aber nicht wirklich schlauer daraus geworden . Ich finde ums verrecken nirgends eine vollständige Liste der Syles . Liegt aber wahrscheinlich daran das mich Onkel Google nicht versteht 8| , oder ich nicht weiß nach welchen Stichwort ich suchen soll. Was mich absolut palle macht ist , warum manche Styles die gleichen Werte haben z.B. $WS_MINIMIZEBOX + $WS_GROUP = 0x00020000. Da fehlt mir irgendwie der zündende Funke, um das zu kapieren.

  • Hallo Raupi,

    wenn 2 verschiedene Konstanten, den gleichen Wert für die gleiche Eigenschaft (hier Style) benutzen dann bewirken sie auch das gleiche (sind halt nur 2 unterschiediche Namen für das gleiche,

    mfg (Auto)Bert

  • Hallo Raupi,

    vielleicht hilft Dir die offizielle Liste von MS...
    Link
    siehe ganz unten auf der Seite ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    • Offizieller Beitrag

    Schnuffel , danke dir ich hab mir danach schon die Finger Wund gegoogled :D
    autoBert naja , scheint eine Microdoof Logic zu sein .

  • Hallo Raupi,

    wenn 2 verschiedene Konstanten, den gleichen Wert für die gleiche Eigenschaft (hier Style) benutzen dann bewirken sie auch das gleiche (sind halt nur 2 unterschiediche Namen für das gleiche,

    mfg (Auto)Bert


    Nicht unbedingt. Je nach verwendetem Fenstertyp (ja, auch Controls sind Fenster) wirken einige Stylewerte unterschiedlich. Deshalb haben sie mehrere Namen. Andere sind einfach doppelt unter verschiedenen Namen vorhanden (z.B. $WS_THICKFRAME = $WS_SIZEBOX)

    • Offizieller Beitrag

    Moin,

    im Header winuser.h sind die meisten (Fenster-)Stile enthalten ...
    winuser.h, oder
    w32api-3.13-mingw32-dev.tar.gz herunterladen, dann hast Du sie alle und noch mehr. ;)


    Gruß
    Greenhorn

    Greenhorn und in welcher Datei befinden sich bei w32api-3.13-mingw32-dev.tar.gz die Gui-Styles ? Sorry wegen der Frage , aber ich habe keinen Plan wo ich da suchen soll .
    Kannst du mir nicht den Teil mit den Styles einfach rauskopieren, du kennst dich da bestimmt aus . ;)

  • ab Zeile 3184 in der Datei winuser.h

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Bessere Version ;) mit WS-Constanten aus der winuser.h


    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $aStyle[2] = _WinGetStyle(WinGetHandle('Windows Task-Manager'))

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Styles", _WinStyle2Text($aStyle[0]))
    MsgBox(0, "ExStyles", _WinExStyle2Text($aStyle[1]))

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinStyle2Text($iStyle)
    ; funkey
    Local $sReturn
    Local $aStyles[27][2] = [['$WS_OVERLAPPEDWINDOW', BitOR($WS_OVERLAPPED, $WS_CAPTION, $WS_SYSMENU, $WS_THICKFRAME, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX)], _
    ['$WS_POPUPWINDOW' , BitOR($WS_POPUP, $WS_BORDER, $WS_SYSMENU)], _
    ['$WS_POPUP' , 0x80000000], _
    ['$WS_CHILD' , 0x40000000], _
    ['$WS_MINIMIZE' , 0x20000000], _
    ['$WS_VISIBLE' , 0x10000000], _
    ['$WS_DISABLED' , 0x08000000], _
    ['$WS_CLIPSIBLINGS', 0x04000000], _
    ['$WS_CLIPCHILDREN', 0x02000000], _
    ['$WS_MAXIMIZE' , 0x01000000], _
    ['$WS_CAPTION' , 0x00C00000], _
    ['$WS_BORDER' , 0x00800000], _
    ['$WS_DLGFRAME' , 0x00400000], _
    ['$WS_VSCROLL' , 0x00200000], _
    ['$WS_HSCROLL' , 0x00100000], _
    ['$WS_SYSMENU' , 0x00080000], _
    ['$WS_THICKFRAME' , 0x00040000], _
    ['$WS_GROUP' , 0x00020000], _
    ['$WS_TABSTOP' , 0x00010000], _
    ['$WS_MINIMIZEBOX' , 0x00020000], _
    ['$WS_MAXIMIZEBOX' , 0x00010000]]
    ;~ ['$WS_TILED' , $WS_OVERLAPPED], _
    ;~ ['$WS_ICONIC' , $WS_MINIMIZE], _
    ;~ ['$WS_SIZEBOX' , $WS_THICKFRAME], _
    ;~ ['$WS_CHILDWINDOW' , $WS_CHILD], _
    ;~ ['$WS_TILEDWINDOW' , $WS_OVERLAPPEDWINDOW]]
    ;~ ['$WS_OVERLAPPED' , 0x00000000], _
    For $i = 0 To UBound($aStyles, 1) - 1
    If BitAND($iStyle, $aStyles[$i][1]) = $aStyles[$i][1] Then
    $sReturn &= $aStyles[$i][0] & @CRLF
    $iStyle = BitXOR($iStyle, $aStyles[$i][1])
    EndIf
    Next
    Return $sReturn & @CRLF & 'Unbekannt: 0x'& Hex($iStyle, 8)
    EndFunc ;==>_WinStyle2Text

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinExStyle2Text($iExStyle)
    ; funkey
    Local $sReturn
    Local $aExStyles[27][2] = [['$WS_EX_OVERLAPPEDWINDOW', BitOR($WS_EX_WINDOWEDGE,$WS_EX_CLIENTEDGE)], _
    ['$WS_EX_PALETTEWINDOW' , BitOR($WS_EX_WINDOWEDGE, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST)], _
    ['$WS_EX_DLGMODALFRAME' , 0x00000001], _
    ['$WS_EX_DRAGDETECT' , 0x00000002], _
    ['$WS_EX_NOPARENTNOTIFY' , 0x00000004], _
    ['$WS_EX_TOPMOST' , 0x00000008], _
    ['$WS_EX_ACCEPTFILES' , 0x00000010], _
    ['$WS_EX_TRANSPARENT' , 0x00000020], _
    ['$WS_EX_MDICHILD' , 0x00000040], _
    ['$WS_EX_TOOLWINDOW' , 0x00000080], _
    ['$WS_EX_WINDOWEDGE' , 0x00000100], _
    ['$WS_EX_CLIENTEDGE' , 0x00000200], _
    ['$WS_EX_CONTEXTHELP' , 0x00000400], _
    ['$WS_EX_RIGHT' , 0x00001000], _
    ['$WS_EX_LEFT' , 0x00000000], _
    ['$WS_EX_RTLREADING' , 0x00002000], _
    ['$WS_EX_LTRREADING' , 0x00000000], _
    ['$WS_EX_LEFTSCROLLBAR' , 0x00004000], _
    ['$WS_EX_RIGHTSCROLLBAR' , 0x00000000], _
    ['$WS_EX_CONTROLPARENT' , 0x00010000], _
    ['$WS_EX_STATICEDGE' , 0x00020000], _
    ['$WS_EX_APPWINDOW' , 0x00040000], _
    ['$WS_EX_LAYERED' , 0x00080000], _
    ['$WS_EX_NOINHERITLAYOUT', 0x00100000], _
    ['$WS_EX_LAYOUTRTL' , 0x00400000], _
    ['$WS_EX_COMPOSITED' , 0x02000000], _
    ['$WS_EX_NOACTIVATE' , 0x08000000]]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aExStyles, 1) - 1
    If BitAND($iExStyle, $aExStyles[$i][1]) = $aExStyles[$i][1] Then
    $sReturn &= $aExStyles[$i][0] & @CRLF
    $iExStyle = BitXOR($iExStyle, $aExStyles[$i][1])
    EndIf
    Next
    Return $sReturn & @CRLF & 'Unbekannt: 0x'& Hex($iExStyle, 8)
    EndFunc ;==>_WinExStyle2Text

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinGetStyle($WinTitle, $WinText = "")
    ; modified by funkey
    Local $RetValue[2], $Temp, $h_window

    [/autoit] [autoit][/autoit] [autoit]

    $h_window = $WinTitle
    If Not IsHWnd($h_window) Then
    $h_window = WinGetHandle($WinTitle, $WinText)
    If @error Then Return SetError(1, 0, "")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; read Windowstyle
    $Temp = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $h_window, "long", $GWL_STYLE)
    If @error Then SetError(2, 0, "")
    $RetValue[0] = '0x' & StringFormat('%008s', Hex($Temp[0]))

    [/autoit] [autoit][/autoit] [autoit]

    ; read extended Windowstyle
    $Temp = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $h_window, "long", $GWL_EXSTYLE)
    If @error Then SetError(3, 0, "")
    $RetValue[1] = '0x' & StringFormat('%008s', Hex($Temp[0]))
    Return $RetValue
    EndFunc ;==>_WinGetStyle

    [/autoit]


    Edit: unnötige Zeilen aus dem Skript entfernt
    Der Task-Manager beinhaltet den Style 0x0000004C, ich habe keine Ahnung, was die 4C bedeutet ?(

    • Offizieller Beitrag

    Danke an alle , ich habe jetzt genug Input bekommen ;) Ihr seid Klasse . Habe die Styles gegen das Flackern endlich gefunden . $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN sind eindeutig besser als $WS_EX_COMPOSITED als ExStyle . Hab ich schon im Englischen Forum gelesen, hat aber irschendwie net geklappt, weil ich ein reines Style>Chaos hatte . Und wie das mit den zusammenzählen der Styles funktioniert hab ich nebenbei auch kapiert :D

    funkey dein Script ist Super, das kann ich immer brauchen . Kannst du ja ins Script Forum stellen . Und der Style 0x0000004C scheint nicht so wichtig zu sein, Funzt auch ohne .