_GetSystemMetrics (kpl. in einem Aufruf)

    • Offizieller Beitrag

    Hi,
    um Abmaße von Fensterrändern, Clientflächen etc. zu erhalten kann man ja die Funktion _WinAPI_GetSystemMetrics verwenden.
    Diese Funktion gibt für den übergebenen Index den entsprechenden Wert zurück.
    In meiner Funktion werden alle ermittelbaren Werte in einem Array zurückgegeben. Die Funktion enthält einen optionalen Parameter, mit dem die ermittelbaren Größen in einer MsgBox oder über Commandline ausgegeben werden. Dabei wird die Funktion selbst nicht ausgeführt.
    Das soll als Hilfe für den Benutzer dienen - denn wer hat schon immer alle 38 möglichen Abfragegrößen parat ;) .
    Der Vollständigkeit halber sind auch die Namen der Windowskonstanten aufgelistet.

    Spoiler anzeigen
    [autoit]

    #include<array.au3>
    $a = _GetSystemMetrics()
    _ArrayDisplay($a)
    ;===============================================================================
    ; Function Name: _GetSystemMetrics([$ShowVal=-1])
    ; Description:: Rückgabe verschiedener Systeminformationen (Maße)
    ; Parameter(s): optional $ShowVal -1 Parameter nicht verwendet (Standard)
    ; 0 Ausgabe aller möglichen Werte in MsgBox
    ; 1 Ausgabe aller möglichen Werte in Commandline
    ; Bei Verwendung des optionalen Parameters wird die Funktion selbst
    ; NICHT ausgeführt.
    ; Return Value(s): Standard Array mit allen ermittelten Werten
    ; opt. Param entsprechende Auflistung
    ; Author(s): BugFix
    ;===============================================================================
    Func _GetSystemMetrics($ShowVal=-1)
    Local $arSysMetric[38][3] = [ _
    ["SM_CXSCREEN",0,"Bildschirmbreite"], _
    ["SM_CYSCREEN",1,"Bildschirmhöhe"], _
    ["SM_CXFULLSCREEN",16,"Breite der Fenster Client Fläche"], _
    ["SM_CYFULLSCREEN",17,"Höhe der Fenster Client Fläche"], _
    ["SM_CYMENU",15,"Höhe des Menüs"], _
    ["SM_CYCAPTION",4,"Höhe von Überschrift/Titel"], _
    ["SM_CXFRAME",32,"Breite des Fenster Rahmens"], _
    ["SM_CYFRAME",33,"Höhe des Fenster Rahmens"], _
    ["SM_CXHSCROLL",21,"Breite des Pfeil Bitmap auf der horizontalen Scrollbar"], _
    ["SM_CYHSCROLL",3,"Höhe des Pfeil Bitmap auf der horizontalen Scrollbar"], _
    ["SM_CXVSCROLL",2,"Breite des Pfeil Bitmap auf der vertikalen Scrollbar"], _
    ["SM_CYVSCROLL",20,"Höhe des Pfeil Bitmap auf der vertikalen Scrollbar"], _
    ["SM_CXSIZE",30,"Breite des Bitmaps in der Titelleiste"], _
    ["SM_CYSIZE",31,"Höhe des Bitmaps in der Titelleiste"], _
    ["SM_CXCURSOR",13,"Breite des Cursors"], _
    ["SM_CYCURSOR",14,"Höhe des Cursors"], _
    ["SM_CXBORDER",5,"Breite des Fenster Rahmens der nicht ausgemessen werden kann"], _
    ["SM_CYBORDER",6,"Höhe des Fenster Rahmens der nicht ausgemessen werden kann"], _
    ["SM_CXDOUBLECLICK",36,"Breite des Rechtecks um die Position des ersten Klicks. Der zweite Klick muß in denselbem Rechteckbereich auftreten."], _
    ["SM_CYDOUBLECLICK",37,"Höhe des Rechtecks um die Position des ersten Klicks. Der zweite Klick muß in denselbem Rechteckbereich auftreten."], _
    ["SM_CXDLGFRAME",7,"Breite des Dialog Fenster Rahmen"], _
    ["SM_CYDLGFRAME",8,"Höhe des Dialog Fenster Rahmen"], _
    ["SM_CXICON",11,"Breite des Icon"], _
    ["SM_CYICON",12,"Höhe des Icon"], _
    ["SM_CXICONSPACING",38,"Breite des Rechtecks, welches das System nutzt zum Positionieren von gekachelten (tiled) Icons"], _
    ["SM_CYICONSPACING",39,"Höhe des Rechtecks, welches das System nutzt zum Positionieren von gekachelten (tiled) Icons"], _
    ["SM_CXMIN",28,"Minimale Breite des Fensters"], _
    ["SM_CYMIN",29,"Minimale Höhe des Fensters"], _
    ["SM_CXMINTRACK",34,"Minimale Tracking Breite des Fensters"], _
    ["SM_CYMINTRACK",35,"Minimale Tracking Höhe des Fensters"], _
    ["SM_CXHTHUMB",10,"Breite der Scrollbox auf horizontalaer Scrollbar"], _
    ["SM_CYVTHUMB",9,"Breite der Scrollbox auf vertikaler Scrollbar"], _
    ["SM_DBCSENABLED",42,"Rückgabe eines Wertes ungleich Null, wenn die aktuelle Windows Version Double-byte Zeichen verwendet, anderenfalls Rückgabe von Null."], _
    ["SM_DEBUG",22,"Rückgabe eines Wertes ungleich Null, wenn die Windows Version eine Debugging Version ist."], _
    ["SM_MENUDROPALIGNMENT",40,"Ausrichtung von Popup Menüs. Wenn Null, ist die linke Seite ausgerichtet wie die linke Seite des korrespondierenden Menüleisten Eintrags. Wenn Nicht-Null, wie dessen rechte Seite."], _
    ["SM_MOUSEPRESENT",19,"Nicht-Null, wenn eine Hardware Maus installiert ist."], _
    ["SM_PENWINDOWS",41,"Handle der Pen Windows Dynamic Link Library falls Pen Windows installiert ist."], _
    ["SM_SWAPBUTTON",23,"Nicht-Null, wenn linker und rechter Maus-Button getauscht sind."]]
    If $ShowVal = 0 Or $ShowVal = 1 Then
    Local $sOut = ''
    For $i = 0 To UBound($arSysMetric) -1
    $sOut &= '[' & $i & '] - ' & $arSysMetric[$i][0] & @TAB & $arSysMetric[$i][2] & @CRLF
    Next
    $sOut = StringTrimRight($sOut, 2)
    EndIf
    Switch $ShowVal
    Case 0
    Return MsgBox(0, 'Auflistung Rückgabewerte', $sOut)
    Case 1
    Return ConsoleWrite($sOut & @CRLF)
    Case Else
    Local $arOut[38], $ret, $dll = DllOpen("user32.dll")
    For $i = 0 To UBound($arSysMetric) -1
    $ret = DllCall($dll, "int", "GetSystemMetrics", "int", $arSysMetric[$i][1])
    If IsArray($ret) Then $arOut[$i] = $ret[0]
    Next
    DllClose($dll)
    Return $arOut
    EndSwitch
    EndFunc ;==>_GetSystemMetrics

    [/autoit]