Wie Systray.au3 verwenden? AutoIt stürzt dabei immer ab

  • Hallo,

    gleich vorweg: blutiger Anfänger und bitte daher um Nachsicht.
    Ich bastle seit heute morgen daran, aber es will nicht so, wie ich.

    Auf zwei Rechnern getestet: einmal Windows 2000 SP 4, ebenso auf Win XP SP 2.
    AutoIt Version 3.3.0.0
    Systray.au3 habe ich von hier: [ offen ] Systray Programme beenden.

    Und dort habe ich auch diesen Schnipsel gefunden, mit dem ich (bis jetzt) einfach bloß einen Rechtsklick auf eines der Programme im Systray ausführen will.

    Spoiler anzeigen
    [autoit]

    #include<Systray.au3>

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

    ;Global $title = "FreeWheel"
    Global $prcoess = "FreeWheel.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)
    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]


    Wenn ich im Scite mit F5 ausführen lasse, erhalte ich:

    Zitat

    >Running:(3.3.0.0):C:\Programme\AutoIt3\autoit3.exe "C:\Programme\AutoIt3\Examples\SystrayClick.au3"
    !>15:25:55 AutoIT3.exe ended.rc:-1073741819
    +>15:25:55 AutoIt3Wrapper Finished
    >Exit code: -1073741819 Time: 4.681


    AutoIt stürzt jedesmal ab, wie gesagt, auf beiden Rechnern.
    Ich habe auch probiert, diese hier zu verwenden: Systray_UDF.au3 aus dem englischen Forum: http://www.autoitscript.com/forum/index.php?showtopic=13704&st=0
    Da erhalte ich aber jedesmal die Meldung:

    Zitat

    ERROR: undefined macro.
    if(@ProcessorArch =


    Ich finde das Makro in der Hilfe auch nicht, ist da die AutoIt-Version zu alt? (Leider ist mein Englisch sehr schlecht, ich habe nicht den ganzen Thread gelesen, sondern bloß vorne das Skript heruntergeladen.)

    Was mach ich denn noch falsch, warum geht die Systray.au3 nicht?
    Alternativen nützen mir nichts. Es geht nicht um FreeWheel (das ist ein braves Programm, dient hier nur zum Test). Mir geht es um etliche Programme, die nur mittels Systray erreichbar sind. Aber wenn schon das einfache Klicken auf ein Symbol nicht funktioniert.
    Bitte helft mir, ich weiß jetzt echt nicht mehr weiter.

    Gruß
    Lisa

    Einmal editiert, zuletzt von Lisa (18. April 2010 um 16:41)

  • Programm läuft bei mir einwandfrei mit der UDF http://www.autoitscript.com/forum/index.php?showtopic=13704&st=0:


    Spoiler anzeigen
    [autoit]

    #include <SysTray_UDF.au3>

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

    ;Global $title = "FreeWheel"
    Global $process = "Scite.exe"

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

    ;clickSysTrayByTitle($title, "right")
    clickSysTrayByProcess($process, "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)
    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]

    Du solltest eventuell dein AutoIT auf aktuellen Stand bringen, da die UDF mit 3.1 erstellt worden ist. :)

    Spoiler anzeigen
    [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.1.1 Beta
    ; Author: Tuape
    ;
    ; Script Function:
    ; Systray UDF - Functions for reading icon info from system tray / removing
    ; any icon.
    ;
    ; Last Update: 7/14/05
    ; Requirements: AutoIt3 Beta - tested on WindowsXP, might also work in win2000
    ;
    ; Functions:
    ; _SysTrayIconCount() - Get count of all systray icons
    ; _SysTrayIconTitles() - Get titles of all programs that have icon on systray
    ; _SysTrayIconProcesses() - Get list of all process names that have icon in systray (hidden or visible)
    ; _SysTrayIconPids() - Get list of all parent process id's that own an icon in systray (hidden or visible)
    ; _SysTrayIconRemove($index) - Remove icon (removes completely, not just hide)
    ; _SysTrayIconIndex($wintitle or $process) - Get icon index based on process name or wintitle
    ; _SysTrayIconTooltip($index) - Get tooltip text of an icon based on index
    ;
    ; Notes:
    ; Some systray icons are actually hidden, so _SysTrayIconCount will probably return more than you see on systray.
    ; Some icons don't have window title on them. However, _SysTrayIconPids() & _SysTrayIconProcesses
    ; do return correct (parent) pid or process name
    ; ----------------------------------------------------------------------------

    [/autoit]

    21 is only half the truth.

  • Hallo Mahagon,

    danke für Deine schnelle Antwort.
    Die Systray_UDF.au3 aus dem englischen Forum habe ich auch schon probiert, die ist auch mit AutoIt 3.1.1 Beta erstellt. Da kommt aber bei mir die Meldung:

    Code
    ERROR: undefined macro.
     if(@ProcessorArch =


    Wenn ich dann abbreche, passiert nichts. Wenn ich die Fehler ignorieren lasse, stürzt der Explorer ab!

    Ich dachte, die von mir verwendete Version 3.3.0.0 ist neuer als die 3.1.1, oder ist 3.1.1 neuer als 3.3.0.0 ??

    Welche AutoIt-Version verwendest Du denn, wenn es bei Dir läuft?

    Ich seh gerade noch, dass ich nicht die Beta, sondern die stabile Version verwende. Macht das einen Unterschied? Muss ich etwa die Beta nehmen, damit die UDF funktioniert?

    Bei der Gelegenheit: Wenn ich AutoIt aktualisieren will, wie gehe ich denn da vor? Muss ich komplett deinstallieren und dann V 3.3.6.1 herunterladen und neu installieren? Oder reicht es, einzelne Dateien auszutauschen?

    Gruß
    Lisa

  • Oh da habe ich wohl eine 3 bei der Versionsnummer überlesen :pinch: .
    Beim Updaten von AutoIT wird dir angeboten das Programm zu deinstallieren oder zu überschreiben.
    Ich persönlich deinstalliere es immer, da ich sowieso keine Daten dort geändert habe und Benutzerdefinierte UDFs bei mir in einem anderen Ordner liegen.


    Der Fehler kommt wahrscheinlich, da @ProcessorArch laut Changelog in der Version 3.3.0.0 (http://www.autoitscript.com/autoit3/docs/history.htm) in @OSArch umbenannt worden ist.
    Eventuell reicht auch ein einfaches umbenennen von @ProcessorArch nach @OSArch.
    Da es bei mir jedoch funktioniert, frag ich mich welche UDF du gerade nutzt (Ist es wirklich die aktuelle?).

    21 is only half the truth.

  • Hallo Mahagon,

    so, da bin ich wieder. Jetzt habe ich es mit der Systray_UDF.au3 an dem XP-Rechner probiert und hurra!! Dort funktioniert es. Dort habe ich die gleiche AutoI-V. 3.3.0.0. Also der "Übeltäter" ist wohl mein "Versuchskaninchen"-Rechner mit Windows 2000.

    Die Umbenennung des Makros seh ich mir nochmal an.
    Hab herzlichen Dank für Deine Hilfe.

    Nachtrag: Ich hatte tatsächlich nicht die neueste Version der Systray_UDF.au3 auf dem Windows 2000-Rechner. Mit der neuen Version funktioniert es auch unter Windows 2000.
    Nochmals danke!

    Gruß
    Lisa

    Einmal editiert, zuletzt von Lisa (18. April 2010 um 17:24)