Teamspeak-Zusatzprogramm // Brauche Hilfe beim Tray-Menü

  • Hallo Leute,

    Ich bin gerade dabei ein Zusatzprogramm zu Teamspeak zu schreiben. Ich möchte jetzt, dass wenn man das Tray-Icon rechtsklickt ein Menü aufgeht mit den Funktionen "Mute Microphone", "Mute Speakers" und "Exit". Ich komme allerdings mit der Autoit-Hilfe nicht weiter und konnte hier im Forum auch nichts dazu finden. Kann mir da jemand helfen?

    Danke schonmal im Vorraus

    LG

    • Offizieller Beitrag

    Ich komme allerdings mit der Autoit-Hilfe nicht weiter und konnte hier im Forum auch nichts dazu finden. Kann mir da jemand helfen?


    X( Willst du uns veräppeln? Schau dir mal die vielen Ergebnisse zur Suchanfrage "Traymenü" an: http://www.autoit.de/index.php?form=Search&searchID=86485&highlight=traymen%C3%BC

  • Es geht ihm nicht um das Traymenü selbst, sondern er will Mute Microphone und Mute Speakers von Ts benutzen.

    • Offizieller Beitrag

    Es geht ihm nicht um das Traymenü selbst, sondern er will Mute Microphone und Mute Speakers von Ts benutzen.


    Nein, es geht im darum diese Punkte aus einem eigenen Traymenü aufzurufen.

    Ruf die SuFu auf: - Erweiterte Suche - Haken raus bei "exakter Treffer" !! - und dann gib ein: Traymenü ==> über 100 Treffer

    • Offizieller Beitrag

    Hier mal das Hilfe-Bsp. umgestrickt.

    Spoiler anzeigen
    [autoit]

    #Include <Constants.au3>
    Opt("TrayMenuMode",1)

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

    $microfonitem = TrayCreateItem("Mute Microphone")
    $speakeritem = TrayCreateItem("Mute Speakers")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit")

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

    TraySetState()

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

    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = $microfonitem
    MsgBox(0, '', 'Func Mikro aus')
    ; Mikro aus
    Case $msg = $speakeritem
    MsgBox(0, '', 'Func Speaker aus')
    ; Speaker aus
    Case $msg = $exititem
    ExitLoop
    EndSelect
    WEnd

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

    Exit

    [/autoit]

    Wenn es für Mic aus und Speaker aus Hotkeys gibt, kannst du diese ja ausführen bei Aufruf des TrayItems.

  • Danke schonmal, Hotkeys kann ich aber leider keine benutzen, da diese auf jedem Rechner anders sein können und man dann ja auch gleich selbst die Hotkeys benutzen könnte. Kann man an minimierte Programme Tastenbefehle senden, ohne dass sie dabei geöffnet werden?

  • [autoit]

    #Include <Constants.au3>
    Opt("TrayMenuMode",1)

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

    $microfonitem= TrayCreateItem("Mute Microphone")
    $speakeritem= TrayCreateItem("Mute Speakers")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit")

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

    TraySetState()

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

    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = $microfonitem
    MsgBox(0, '', 'Func Mikro aus')
    WinActivate("TeamSpeak 2")
    Send("{ALT}")
    Send("{RIGHT}")
    Send("{RIGHT}")
    Send("{RIGHT}")
    Send("{DOWN}")
    Send("{DOWN}")
    Send("{Enter}")
    Case $msg = $speakeritem
    MsgBox(0, '', 'Func Speaker aus')
    WinActivate("TeamSpeak 2")
    Send("{ALT}")
    Send("{RIGHT}")
    Send("{RIGHT}")
    Send("{RIGHT}")
    Send("{DOWN}")
    Send("{DOWN}")
    Send("{DOWN}")
    Send("{Enter}")
    Case $msg = $exititem
    ExitLoop
    EndSelect
    WEnd

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

    $last = "0"

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

    $run = regread("HKEY_CLASSES_ROOT\teamspeak\DefaultIcon","")

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

    If @error Then
    MsgBox(0, "Fehler", "Teamspeak konnte nicht gefunden werden")
    Exit
    EndIf

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

    run($run)
    If @error Then
    MsgBox(0, "Fehler", "Teamspeak konnte nicht gefunden werden")
    Exit
    EndIf

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

    While 1
    $msg = WinGetText("TeamSpeak 2")
    $parts = StringSplit($msg, @CRLF)
    If (UBound($parts) -3) > -1 Then
    $letzte = $parts[$parts[0] - 3]
    Select
    Case StringInStr($letzte, "joined channel")
    ?
    If $last = $res[0] Then
    Sleep(100)
    ContinueLoop
    Else
    TrayTip("Teamspeak", $res[0], 5)
    $last = $res[0]
    EndIf
    EndSelect
    Else
    Sleep(30)
    EndIf
    WEnd

    [/autoit]

    (63,17) : ERROR: syntax error (illegal character)
    (64,36) : WARNING: $res: possibly used before declaration.
    (64,36) : ERROR: $res: undeclared global variable.

    Vor dem Einbau des Tray-Menüs ging es noch. Kann mir jemand sagen, woran es liegt?

  • (63,17) : ERROR: syntax error (illegal character) Da steht einfach ein fragezeichen!
    (64,36) : WARNING: $res: possibly used before declaration. $res wird nirgends deklariert
    (64,36) : ERROR: $res: undeclared global variable. s.o.

    //EDIT: DA sind 2 While-Endlosschleifen! wie soll das Programm von der einen in die andere kommen?

    Einmal editiert, zuletzt von eagle (17. September 2008 um 17:17)

  • Also was du mit der 2. While schleife so genau bezwecken willst weis ich nicht. Ich weis nur, dass Sich TS über die TSRemote.dll um einiges leichter steuern lässt.

    Spoiler anzeigen
    [autoit]

    #Include <Constants.au3>
    Opt("TrayMenuMode",1)

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

    $dll = DllOpen("TSRemote.dll")
    $microfonitem = TrayCreateItem("Mute Microphone")
    $speakeritem = TrayCreateItem("Mute Speakers")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit")
    $mutemic = False
    $mutephone = False

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

    TraySetState()

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

    While 1
    $msg = TrayGetMsg()
    Select
    Case $msg = $microfonitem
    If $mutemic = False Then
    DllCall($dll,"INT", "tsrSetPlayerFlags", "INT", 61584)
    $mutemic = True
    Else
    DllCall($dll,"INT", "tsrSetPlayerFlags", "INT", 67584)
    $mutemic = False
    EndIf
    Case $msg = $speakeritem
    If $mutephone = False Then
    DllCall($dll,"INT", "tsrSetPlayerFlags", "INT", 63584)
    $mutephone = True
    Else
    DllCall($dll,"INT", "tsrSetPlayerFlags", "INT", 67584)
    $mutephone = False
    EndIf
    Case $msg = $exititem
    ExitLoop
    EndSelect
    WEnd
    Exit

    [/autoit]

    Die Perfekte Lösung ist es vielleichtnicht, aber die DLL ist einfach nur so gut wie nicht dokumentiert.
    DLL im Anhang.