"Automatisch" erstellten Button ansprechen - Gute Idee gesucht!

  • Hey,

    ich habe folgendes Skript (vereinfacht):

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <WinAPI.au3>
    #include <ButtonConstants.au3>
    #include <Misc.au3>

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

    global $titel = "Notnagel"
    if _Singleton($titel,1) = 0 then exit

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

    Opt("GUICoordMode", 1)
    Global $HA = @DesktopHeight -200
    Global $VA = @DesktopWidth -800

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

    Global $Farbe = 0x00BFFF
    Global $Fokusfarbe = 0x4169E1

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

    #Region HauptGUI
    Global $binfo = "Shutdown|Reboot|Standby|Exit" ;Buttonbeschriftung für jeden Button mit | getrennt eingeben -> Anzahl der Beschriftungen bestimmt gleichzeitig die Anzahl der Buttons
    Global $abfinfo = StringSplit($binfo, '|')
    Global $banzahl = $abfinfo[0]
    Global $babstandleft = 50 ;Abstand links und rechts zur HauptGUI
    Global $babstandtop = 10 ;Abstand zwischen den Buttons
    Global $bwidth = $VA - 2* $babstandleft ;Button Left ausrechnen
    Global $bheight = $HA / $banzahl - $babstandtop* ($banzahl +1) / $banzahl ;Button Höhe in Abhängigkeit zur Auflösung ausrechnen
    Global $HauptGUI = GUICreate("", $VA, $HA, -1, -1, BitOR($WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS))

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

    ;Buttons erstellen und Button TOP ausrechnen
    For $i = 1 to $banzahl
    Global $Button = GUICtrlCreateButton($abfinfo[$i], $babstandleft, $i*$babstandtop+ ($i -1)* $bheight, $bwidth, $bheight,$BS_BITMAP )
    GUICtrlSetFont(-1, 20)
    GUICtrlSetBkColor(-1, $Farbe)
    next
    #EndRegion HauptGUI

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

    GUISetState(@SW_SHOW, $HauptGUI)

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

    Global $last_focus = GUICtrlGetHandle(-1)
    GUIRegisterMsg($WM_USER, "MY_WM_USER")

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

    While 1

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

    $msg = GUIGetMsg()
    switch $msg
    case $GUI_EVENT_Close
    Exit
    case 3
    If MsgBox(32 + 4, "Shutdown", "PC wirklich herunterfahren?") = 6 Then Shutdown(1)
    case 4
    If MsgBox(32 + 4, "Reboot", "PC wirklich neu starten?") = 6 Then Shutdown(2)
    case 5
    If MsgBox(32 + 4, "Standby", "PC wirklich in den Standby schicken?") = 6 Then Shutdown(32)
    case 6
    Exit
    EndSwitch
    WEnd

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

    Func MY_WM_USER($hWnd, $msg, $wParam, $lParam)
    Local $Control = WinGetHandle(_WinAPI_GetFocus())
    GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($last_focus), $Farbe)
    GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($Control), $Fokusfarbe)
    $last_focus = $Control
    EndFunc ;==>_HauptReset

    [/autoit]

    Die Buttons sollen also in Abhängigkeit der Auflösung und ihrer Anzahl erstellt werden. (Hintergrund: Das Skript wird auf verschiedenen HTPC's mit völlig unterschiedlicher Auflösung eingesetzt und ich möchte nicht bei jeder Einrichtung im Skript die Controls zurechtrücken).
    Das blöde ist nur, dass die Anzahl der Buttons auch dynamisch ist ... somit muss ich bei jeder Veränderung (z.B. zwischen Button 5 und 6 soll ein weiterer eingefügt werden) die ganze While .. Wend Schleife umschreiben.
    Daher die Frage: Ist es möglich die Buttons irgendwie anders ansprechen? Oder hat jemand ein ganz anderes Konzept?

    Gruß nuts