Menü über Systray-Icon

  • Mahlzeit!
    Ist es möglich:
    1. Meine Gui auf ein SysTray zu minimieren
    2. Diesem Icon ein anderes Bild zuzuordnen
    und 3. was am wichtigsten ist aber 1. vorraussetz:
    kann man, wenn man zB rechtsklickt auf das Systray-icon ein Menü auf poppen lassen und diesen Punkten Befehle zuordnen?
    Habe einfach mal ein Beisielscreen mitgeschickt damit ihr wisst, was ich meine...

    Danke

  • Hey,
    natürlich ist das möglich.

    Spoiler anzeigen
    [autoit]


    Opt( 'TrayAutoPause', 0 )
    Opt( 'TrayMenuMode', 3 )

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

    $func1 = TrayCreateItem( 'Funktion 1' )
    $func2 = TrayCreateItem( 'Funktion 2' )
    $menu = TrayCreateMenu( 'Menu' )
    $func3 = TrayCreateItem( 'Funktion 3', $menu )
    $exit = TrayCreateItem( 'Exit', $menu )

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

    While 1
    $msg = TrayGetMsg()
    Switch $msg
    Case $func1
    MsgBox( 0, '', 'Text 1' )
    Case $func2
    MsgBox( 0, '', 'Text 2' )
    Case $func3
    MsgBox( 0, '', 'Text 3' )
    Case $exit
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Das Icon ist dann das, das du der Exe beim Compilieren zuweist.

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Ok , habs auch gerade gefunden, benutze die Deutsche Helpfile und da ist das nicht so ausgührlich beschrieben. Werde mich jetzt an die Englische halten. Außerdem gab es schon mal einen ähnlichen Thread, den ich aber nicht gleich gefunden habe.
    [ gelöst ] Systemtray icon mit Menü erzeugen

    Trotzdem Frage: Wie mache ich das, dass ich meine Gui sowohl über die Gui selbst UND über das SysTrayMenu steuern kann?!
    Sobald ich die SysTray aufrufe, geht bei meiner eigentlichen Gui nix mehr

    Spoiler anzeigen
    [autoit]


    ;Konfiguration des eigentlichen GUI (Buttons etc...)
    ;Systray
    Opt("TrayMenuMode",1)

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

    $menue = TrayCreateMenu("Menue")
    $tray_start_httpd = TrayCreateItem("httpd - Start",$menue)
    $tray_stop_httpd = TrayCreateItem("httpd - Stop",$menue)
    $tray_start_mysql = TrayCreateItem("MySQL - Start",$menue)
    $tray_stop_mysql = TrayCreateItem("MySQl - Stop",$menue)
    TrayCreateItem("")
    $aboutitem = TrayCreateItem("About")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit")

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

    TraySetState()

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

    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $msg = $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $msg = $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $msg = $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $msg = $aboutitem
    Msgbox(48,"About:","© ####### AG")
    Case $msg = $exititem
    ExitLoop
    EndSelect
    WEnd

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

    Exit

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

    ; -------------- System Tray Ende --------------

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

    While 1
    $msg = GUIGetMsg()

    Switch $msg
    ;Optionen der eigentlichen GUI

    [/autoit]
  • Du sitzt ja ab Scriptstart in dem Loop für das
    TrayGetMsg fest.
    Also, du kannst entweder:

    Die TrayGetMsg & GUIGetMsg in eine Schleife packen,

    Spoiler anzeigen
    [autoit]


    While 1
    $traymsg = TrayGetMsg()
    Switch $traymsg
    Case ;...
    EndSwitch

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

    $guimsg = GUIGetMsg()
    Switch $guimsg
    Case ;...
    EndSwitch
    WEnd

    [/autoit]

    oder

    Den TrayOnEventMode nehmen ;)

    Spoiler anzeigen
    [autoit]


    Opt( 'TrayOnEventMode', 1 )
    TrayCreateItem( 'exit' )
    TrayItemSetOnEvent( -1, '_exit' )

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

    While 1
    $msg = GuiGetMsg()
    ;...
    WEnd

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Ok...ich weiß was du meinst, aber er meckert grad das mir ein "EndSelect oder Case statement" fehlt, aber ich hab doch eig alles. (hab quellcode gekürzt aber hab mich versichert, dass nirgendwo noch zufällilg ein weiters Select steht) vll hab ich irgendwo doch ein Syntax Fehler den ich grad net finde

    [spoiler]

    [autoit]


    ;....
    Opt("TrayMenuMode",1)

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

    $menue= TrayCreateMenu("Menue")
    $tray_start_httpd= TrayCreateItem("httpd - Start",$menue)
    $tray_stop_httpd= TrayCreateItem("httpd - Stop",$menue)
    $tray_start_mysql= TrayCreateItem("MySQL - Start",$menue)
    $tray_stop_mysql= TrayCreateItem("MySQl - Stop",$menue)
    TrayCreateItem("")
    $aboutitem = TrayCreateItem("About")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit")

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

    TraySetState()
    GUISetState()

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

    While 1
    $traymsg = TrayGetMsg()
    Switch $traymsg
    Select
    Case $traymsg = $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $traymsg = $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $traymsg = $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $traymsg = $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $traymsg = $aboutitem
    Msgbox(48,"About:","© ####### AG")
    Case $traymsg = $exititem
    ExitLoop
    EndSelect
    EndSwitch
    ; -------------- System Tray Ende --------------

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

    $msg = GUIGetMsg()
    Switch $msg

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

    Func ...
    EndFunc

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

    Case ;...

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

    EndSwitch
    WEnd
    Exit

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

    ;....

    [/autoit]

    [spoiler]

    Einmal editiert, zuletzt von cphowdy (30. Juli 2008 um 16:23)

  • [autoit]

    While 1
    $traymsg = TrayGetMsg()
    Switch $traymsg
    Select
    Case $traymsg = $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $traymsg = $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $traymsg = $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $traymsg = $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $traymsg = $aboutitem
    Msgbox(48,"about:","© mööp - nix Firmenname")
    Case $traymsg = $exititem
    ExitLoop
    EndSelect
    EndSwitch

    [/autoit]

    Siehst du, dass da was nicht passt ? ;)

    Du hast in dem Switch - EndSwitch gar kein Case ;)
    Schmeiß einfach Switch & EndSwitch raus:

    Spoiler anzeigen
    [autoit]


    While 1
    $traymsg = TrayGetMsg()
    Select
    Case $traymsg = $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $traymsg = $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $traymsg = $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $traymsg = $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $traymsg = $aboutitem
    Msgbox(48,"about:","© mööp - nix Firmenname")
    Case $traymsg = $exititem
    ExitLoop
    EndSelect

    [/autoit]

    Oder (schöner) nehm nur das Switch:

    Spoiler anzeigen
    [autoit]


    While 1
    $traymsg = TrayGetMsg()
    Switch $traymsg
    Case $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $aboutitem
    Msgbox(48,"about:","© mööp - nix Firmenname")
    Case $exititem
    ExitLoop
    EndSwitch

    [/autoit]

    Ich würde dir aber trotzdem zum OnEventMode raten..
    kannst dich ja mal damit befassen, wenn das hier erstmal läuft =)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    Einmal editiert, zuletzt von limette (30. Juli 2008 um 16:25)

  • Nächste Frage: Kann die Menüpkt auch im Systray-Menü Enabled Disbaled setzen?

  • [autoit]


    TrayItemSetState($tray_id, $TRAY_DISABLE )
    TrayItemSetState($tray_id, $TRAY_ENABLE )

    [/autoit]

    Siehe: AutoIt-Hilfe ;)
    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • So... ja ich hab n Begabung dafür, Dinge 2 min nach dem ich sie gepostet habe selbst zu finden! Trotzdem Danke!
    Auch auf die Gefahr hin, dass ich es selber gleich wieder finde (stehe bisschenunter Zeitdruck) kann ich meine eigentliche GUI wenn ich auf$GUI_EVENT_CLOSE (also "X") drücke in die Systray minimieren, also so das ich alles noch über das Menü im Systray steuern kann, aber meine GUi in der Taskleiste nicht mehr auftaucht?

    Grüße

  • Ich weiß nicht ob du das jetzt schon gefunden hast, aber...
    wie wärs mit:

    Switch $msg
    Case §GUI_EVENT_CLOSE
    GUISetState( @SW_HIDE, $gui )
    EndSwitch

    Solltest dann natürlich einen TrayEintrag zum wiederherstellen anfügen ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.