Kann man das eleganter coden?

  • Moin,
    also ich nutze die GUIGetMsg() Funktion.
    Unter anderem ist dann folgender Code enthalten:

    [autoit]

    Case $GUI_menu[6]
    ShellExecute($ini[6][2])
    Case $GUI_menu[7]
    ShellExecute($ini[7][2])
    Case $GUI_menu[8]
    ShellExecute($ini[8][2])
    Case $GUI_menu[9]
    ShellExecute($ini[9][2])
    Case $GUI_menu[10]
    ShellExecute($ini[10][2])
    Case $GUI_menu[11]
    ShellExecute($ini[11][2])
    Case $GUI_menu[12]
    ShellExecute($ini[12][2])
    Case $GUI_menu[13]
    ShellExecute($ini[13][2])
    Case $GUI_menu[14]
    ShellExecute($ini[14][2])
    Case $GUI_menu[15]
    ShellExecute($ini[15][2])
    Case $GUI_menu[16]
    ShellExecute($ini[16][2])
    Case $GUI_menu[17]
    ShellExecute($ini[17][2])
    Case $GUI_menu[18]
    ShellExecute($ini[18][2])

    [/autoit]

    Im Grunde also ist im jedem Case die notwendige Variable schon enthalten. Ich glaube man könnte sowas nicht in einer Schleife lösen? Oder dass ich zumindest den Wert immer nur einmal schreiben muss und die Fehlerwahrscheinlichkeit kürzt.

    Einmal editiert, zuletzt von mille86 (24. Februar 2010 um 02:13)

    • Offizieller Beitrag

    Hallo,

    Eine Möglichkeit (nicht die beste, aber schon besser, hab grad nicht mehr Zeit sorry)

    [autoit]

    $hMsg = GuiGetMsg()
    For $i = 6 To 18
    If $hMsg = $GUI_menu[$i] Then ShellExecute($ini[$i][2])
    Next

    [/autoit]

    Schöner wäre es zum Beispiel mit Dummy Controls.
    Hier mal ein Beispiel (Hab ich für mich geschrieben, ist also auch nicht hundertprozentig sauber, aber man sieht zumindest was gemeint ist.) auch mit Accelerator Keys (Also so eine Art Hotkey)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #NoTrayIcon
    Global $aProg[11][2]
    $aProg[0][0] = 10
    $aProg[1][0] = "DDL-Warez"
    $aProg[1][1] = "d:\skripts\Autoit\utillity\netz\Anderes\Sonstiges\last100_ddl-warez.au3"
    $aProg[2][0] = "SMS"
    $aProg[2][1] = "d:\skripts\Autoit\utillity\netz\Anderes\SMS Sending\NEW\005.au3"
    $aProg[3][0] = "RS Logs"
    $aProg[3][1] = "d:\skripts\Autoit\utillity\netz\Anderes\RapidShare\Logs.au3"
    $aProg[4][0] = "Pizza Timer"
    $aProg[4][1] = "d:\skripts\Autoit\utillity\G15 Applets\sonstiges\Pizza Timer.au3"
    $aProg[5][0] = "nvUpdate 0.95"
    $aProg[5][1] = "d:\skripts\Autoit\utillity\netz\Anderes\Sonstiges\nVUpdate.exe"
    $aProg[6][0] = ""
    $aProg[6][1] = ""
    $aProg[7][0] = ""
    $aProg[7][1] = ""
    $aProg[8][0] = ""
    $aProg[8][1] = ""
    $aProg[9][0] = ""
    $aProg[9][1] = ""
    Global $AccelKeys[9][2]

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

    $iWidth = 100

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

    GUICreate("RunAll", $iWidth, 800, @DesktopWidth - $iWidth - 10, 30, -1, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
    $hDummy1 = GUICtrlCreateDummy()
    For $i = 1 To $aProg[0][0]
    If $i < 10 Then
    GUICtrlCreateButton("["&$i&"]"&$aProg[$i][0],0,($i-1)*20,$iWidth,18,$BS_LEFT)
    $AccelKeys[$i-1][0] = $i
    $AccelKeys[$i-1][1] = $hDummy1 + $i
    Else
    GUICtrlCreateButton($aProg[$i][0],0,($i-1)*20,$iWidth,18,$BS_LEFT)
    EndIf
    Next
    GUISetAccelerators($AccelKeys)

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

    GUISetState()

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

    While 1
    $hMsg = GUIGetMsg()
    Switch $hMsg
    Case -3
    Exit
    Case $hDummy1 + 1 To $hDummy1 + $aProg[0][0] + 1
    GUICtrlSetState($hMsg,$GUI_DISABLE)
    $sName = $aProg[$hMsg - $hDummy1][0]
    $sPath = $aProg[$hMsg - $hDummy1][1]
    Switch StringRight($sPath,3)
    Case "exe","bat","com","bif","lnk"
    Run($sPath)
    Case Else
    ShellExecute($sPath)
    EndSwitch
    Sleep(500)
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Gruß
    Spider

  • Noch eine Möglichkeit, etwas umständlicher aber auch eine Möglichkeit ... :D

    Spoiler anzeigen
    [autoit]

    Local $nMsg

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

    $nMsg = GUIGetMsg (FALSE)

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

    Switch ($nMsg)

    Case $ID_BUTTON
    ; ...
    Case $ID_MENU[6] To $ID_MENU[18] ; IDs müssen aufeinanderfolgende Kennziffern sein.
    ShellExecute ($ini[$nMsg - $ID_MENU[6] + 6][2])
    Case Else
    ; ...
    EndSwitch

    [/autoit]


    Gruß
    Greenhorn