komisches Phänomen.

  • Hey Leute,
    ich habe mich extra angemeldet, damit ihr mir helfen könnt :(.
    Ich habe mir für die Arbeit ein script gebastelt, da man ständig seine Proxy Zugangsdaten eintragen muss.
    Sinn hin oder her.
    Ich habe einen komischen Fehler. Immer wenn ich unten rechts im Systemtray auf den Pfeil zum aufklappen klicke, werden die Zugangsdaten vom script eingetragen.

    Ich freue mich sehr, wenn sich jemand die Zeit nimmt und mein Script anguckt.


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=beta
    #AutoIt3Wrapper_Icon=..\..\..\..\Downloads\Aha-Soft-Security-Secrecy.ico
    #AutoIt3Wrapper_Outfile=Proxy_checker.v0.exe
    #AutoIt3Wrapper_Res_Fileversion=0.0.0.1
    #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    $config = "H:\Script\config.txt"


    While 1

    $proxy_name = FileReadLine($config,6)
    $proxy_pwd = FileReadLine($config,7)

    $master_pwd = FileReadLine($config,8)
    $proxy1 = FileReadLine($config,10)
    $proxy2 = FileReadLine($config,11)
    $proxy3 = FileReadLine($config,12)
    $proxy4 = FileReadLine($config,13)
    $proxy5 = FileReadLine($config,14)
    $proxy6 = FileReadLine($config,15)


    $win = WinGetTitle("[active]")

    Switch $win
    Case $proxy1
    WinActivate($proxy1)
    Send($proxy_name)
    Send("{TAB}")
    Send($proxy_pwd)
    Send("{ENTER}")
    sleep(1000)
    Case $proxy2
    WinActivate($proxy2)
    Send($proxy_name)
    Send("{TAB}")
    Send($proxy_pwd)
    Send("{ENTER}")
    sleep(1000)
    Case $proxy3
    WinActivate($proxy3)
    Send($proxy_name)
    Send("{TAB}")
    Send($proxy_pwd)
    Send("{ENTER}")
    sleep(1000)
    Case $proxy4
    WinActivate($proxy4)
    Send($proxy_name)
    Send("{TAB}")
    Send($proxy_pwd)
    Send("{ENTER}")
    sleep(1000)
    Case $proxy5
    WinActivate($proxy5)
    Send($proxy_name)
    Send("{TAB}")
    Send($proxy_pwd)
    Send("{ENTER}")
    sleep(1000)
    Case $proxy6
    WinActivate($proxy6)
    Send($proxy_name)
    Send("{TAB}")
    Send($proxy_pwd)
    Send("{ENTER}")
    sleep(1000)
    ;~ ;MasterPasswort Firefox!
    Case "Passwort erforderlich"
    WinActivate("Passwort erforderlich")
    Send($master_pwd,1)
    Send("{ENTER}")
    sleep(1000)
    ;~ ;IE Kennwort muss gespeichert sein
    Case "Windows-Sicherheit"
    WinActivate("Windows-Sicherheit")
    Send("{ENTER}")
    sleep(1000)
    EndSwitch


    If WinExists("TeamViewer: Proxy authentication required") Then
    WinActivate("TeamViewer: Proxy authentication required")
    Send("{TAB}")
    Send("{TAB}")
    Send($proxy_name,1)
    Send("{TAB}")
    Send($proxy_pwd,1)
    Send("{ENTER}")
    EndIf

    sleep(100)
    WEnd


    Edit: Sorry, beim Code einfügen hats mir immer die Formatierung zerrissen.

  • Wundert mich wenig, dass dein Script unzuverlässig arbeitet.

    Zum einen macht es keinen Sinn die Werte der Config Datei bei jedem Schleifendurchlauf zu lesen, das sind hunderte, wenn nicht tausende Festplattenzugriffe pro Sekunde. Lies die Config einmal bei Programmstart oder wenn unbedingt erforderlich periodisch alle 30 Sekunden oder so. (timerinit, timerdiff oder adlibregister wären hier deine Freunde). EDIT: Ok sehe gerade dein Sleep(100) in der Hauptschleife, das reduziert das lesen auf 10 mal pro Sekunde, dennoch unnötig und dein Script würde schneller reagieren wenn du das sleep weglässt und dafür das Lesen der Config aus der Schleife nimmst.

    Nun hast du aber ein ganz anderes Problem. Angenommen das Lesen eines der Einträge aus der Config Datei schlägt fehl (z.B. weil nicht alle Werte eingetragen wurden), dann wird dir filereadline einen leeren String zurückliefern. Deine Switch case Verzweigung vergleicht diesen leeren String dann mit dem Titel des aktiven Fensters. Scheitert auch das lesen des aktiven Fenstertitels oder das Fenster hat schlichtweg keinen Titel, dann ist deine Bedingung erfüllt, obwohl du das mit Sicherheit nicht wolltest. Also wird dein Script lustig Daten senden.

    Hier ist das nächste Problem... send() macht wenn ich mich recht erinnere Probleme in Verbindung mit Sonderzeichen, außerdem kann dein send irgendwo landen wenn der User irgendwohin klickt oder sich zufällig ein anderes Fenster in den Vordergrund drängelt. Deshalb solltest du dir statt send controlsend oder controlsettext und statt ENTER controlclick in der Hilfe anschauen.

  • Hallo misterspeed.
    Vielen vielen Dank für die Antwort und die Tips.

    Ich haber in der config.txt überall etwas eingetragen. z.B. "Platzhalter". Es gibt also keine Leeren Zeilen, die eingelesen werden. Das war auch meine erste Vermutung.

    Deine anderen Tipps nehme ich dankend entgegen, werde mich diesen aber erst annehmen, wenn ich das eigentliche problem gelöst habe.

    Bitte helft mir  :)

  • Wie wärs mal mit ein wenig Debugging?

    Bau ans Ende von jedem case eine Debug Meldung ein die dir den ermittelten Fenstertitel und die Variable des ausgelösten case anzeigt.
    Beispiel:

    [autoit]


    ...
    Case $proxy1
    WinActivate($proxy1)
    Send($proxy_name)
    Send("{TAB}")
    Send($proxy_pwd)
    Send("{ENTER}")
    sleep(1000)
    msgbox(0,"Debug","window title: " & @tab & $win & @crlf & "case variable: " & @tab & $proxy1)
    Case $proxy2
    ...

    [/autoit]
  • ich habe mal folgendes versucht:

    [autoit]


    while 1
    $win = WinGetTitle("[active]")
    tooltip($win)
    wend

    [/autoit]

    oder so ähnlich. Beim öffnen des Trays passiert nichts, bei den anderen Fenstern zeigt er die Titel zuverlässig an :(

  • Nicht jedes Fenster hat einen Titel. Was macht die Funktion Tooltip() wenn man ihr "nichts" zum anzeigen gibt? Genau sie zeigt nichts an!

    Zitat von 'Hilfe Auszug Tooltip()

    Ein Tooltip bleibt sichtbar, bis das Skript schließt oder ToolTip("") aufgerufen wird.

  • ok ok. Sorry Jungs.
    Vielen dank an misterspeed.
    Dank deinem Degugg script hab ich den Fehler gefunden und ich sage nur:
    Ich bin der dümmste Mensch!! :)
    Die txt lag nicht im richtigen Verzeichnis und konnte daher nicht geladen werden.

    -.-
    danke euch!!

  • Dann setze bitte das Thema auf gelöst. Und bei der Gelegenheit kannst du ja so freundlich sein (das zielt jetzt auf diese äußerst unfreundliche Äußerung " werde mich diesen aber erst annehmen" - was soll das?) den Code nicht nur in einen Spoiler, sondern auch in einen Quellcode Container zu verfrachten. Und das merkst du dir dann auch für deine zukünftigen Hilfe-Anfragen - genau so wie die Wahl eines sinnvollen und aussagekräftigen Titels.

    Danke.