Tray programm bedienen

  • Ich möchte mit autoti ein programm bedienen, was sich in dem Tray befindet
    z.b. Antivir PE (der rote schirm)
    den kann man ja über linksclick und dann im menü aktivieren
    aber wie mache ich das ohne die maus zu bewegen und ohne dass sich das fenster öffnet

    PS: nein das soll kein virenprogramm disabler werden...nur als beispiel...wird ein programm für mich zu hause..

  • Hi,
    Einige Programme laufen als Dienst. Dann einfach den Dienst beenden und der Spuck ist vorbei. Oder ev. auch den Prozess killen mit "ProcessClose".
    Vielleicht funktioniert ja eines von beiden.

    Gruss
    eddy_erpel

  • ich will es nicht beenden, ich will es starten...
    wenn ich links auf das trayicon klicke kommt ein menü mit shortcuts...
    und einen menüpunkt davon will ich anwählen

    • Offizieller Beitrag

    Hi,

    das Zauberwort heißt Systray.au3.

    Hier mal ein BSP:

    Spoiler anzeigen
    [autoit]

    #include<Systray.au3>

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

    Global $title = "XXX"
    ;Global $prcoess = "icqlite.exe"
    Global $prcoess = "winampa.exe"

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

    ;clickSysTrayByTitle($title, "right")
    clickSysTrayByProcess($prcoess, "right")

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

    Func clickSysTrayByTitle($winTitle, $click = "left", $times = 1)
    Local $a = _SysTrayIconTitles ()
    Local $p = MouseGetPos()
    For $i = 0 To UBound($a) - 1
    If $a[$i] = $winTitle Then
    $pos = _SysTrayIconPos ($i)
    MouseClick($click, $pos[0], $pos[1], $times, 1)
    ExitLoop
    EndIf
    Next
    MouseMove($p[0], $p[1], 1)
    EndFunc ;==>clickSysTrayByTitle

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

    Func clickSysTrayByProcess($winProcess, $click = "left", $times = 1)
    If Not ProcessExists($winProcess) Then Return -1
    Local $a = _SysTrayIconProcesses ()
    Local $p = MouseGetPos()
    For $i = 0 To UBound($a) - 1
    If $a[$i] = $winProcess Then
    $pos = _SysTrayIconPos ($i)
    MouseClick($click, $pos[0], $pos[1], $times, 1)
    ExitLoop
    EndIf
    Next
    MouseMove($p[0], $p[1], 1)
    EndFunc ;==>clickSysTrayByProcess

    [/autoit]

    So long,

    Mega

  • ne das ist es ne...will ja nicht mit der mausklicken...
    also versuch: ich will eine taste an einen process senden
    wie geht das?

  • hi,

    würds gern mal probieren. aber wie ich sehe, brauche ich die systray.au3. nur hab ich die leider nicht; wo gibts die bitte ? mit der suchfunktion hier leider nix gefunden.

    gruss exberliner

  • ist aber nicht das was ich will
    ich will nur eine taste an einen prozess senden...
    muss doch gehen

  • wozu willst du was senden wenn kein fenster vorhanden ist? ;)

    dann öffne es halt vorher oder mach es sichtbar wenn es nur versteckt ist. weiß ja nicht was du da machst :D

  • ich habe ein prozess mit trayicon...an den möchte ich eine taste senden
    darum kein fenster

  • hi flamefire,

    finde den namen des processes raus und schau dir das proggi von th.meger an, welches auch zu deinem ziel führen wird (systray.au3 nicht vergessen).

    peethebee merci für den link

    @th.meger cooles teil dein proggi, da bleibt ja kaum nen wunsch unerfüllt.

    gruss exberliner

  • aber dann bewegt sich ja die maus =(
    und das will ich nicht...die soll ne mal zucken

    kann man das menü eines trayprogs auch ohne mauslick öffnen? das senden der taste geht...aber das menü ,muss offen sein ohne klick

  • dann versuch dem menü nen befehl zu senden dass es sich gefälligst öffnen soll (das geht wirklich, irgendwie)

    ControlCommand ( "title", "text", controlID, "command", "option" )

  • ich nehm jz doch die funktion aus der UDF
    auch wenn sich die masu bewegt...
    Frage dazu: kann man das nicht noch kleiner machen?
    Gebraucht wird das Handle aus _SysTrayIconHandle und die position...
    Bekannt ist der "Fenstertitel" (aus Winlist()) und der Prozess (aus processlist())
    also müsste sich doch das Handle erkennen lassen mit wingethandle() (auch wenns kein fenster gibt, aber einen fensternamen?), oder? weil die funktion hat nen haufen dllcalls...
    und die postion müsste sich doch auch einfacher bestimmen lassen als in der UDF, in der dazu 10 verschachtelte benutzt werden