Problem mit TrayTip

  • Nabend,

    ich hab ein Problem mit dem folgenden Code:

    [autoit]


    Global $SaveSciTEOn = False, $SaveSciTEOff = False

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

    While 1

    If StringInStr(WinGetTitle(""), "SciTE") And Not $SaveSciTEOn Then
    TrayTip("", "SciTE On", 5)
    $SaveSciTEOff = False
    $SaveSciTEOn = True
    EndIf

    If Not StringInStr(WinGetTitle(""), "SciTE") And Not $SaveSciTEOff Then
    TrayTip("", "SciTE Off", 5)
    $SaveSciTEOn = False
    $SaveSciTEOff = True
    EndIf

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

    WEnd

    [/autoit]

    Unzwar möchte ich wenn das SciTE-Fenster aktiv ist ein TrayTip für 5 Sekunden anzeigen lassen und wenn das Fenster nicht aktiv ist auch, dann nur halt mit anderen Text. Inzwischen hab ich schon das der TrayTip nur beim Wechsel (aktiv -> nicht aktiv; nicht aktiv -> aktiv) angezigt wird und nicht dauernd. Weil er ja immerwider den Titel von dem aktiven Fenster überprüft. Aber wie muss der Code aussehen damit der TrayTip nur 5 Sekunden angezeigt wird und dann erlischt, und dann erst wieder wenn man das Fenster gewechselt hat? Normalerweise ist dafür doch der dritte Parameter von TrayTip zuständig, der heißt Timeout, aber irgendwie funzt das nicht.

    Einmal editiert, zuletzt von m-obi (18. Februar 2009 um 01:00)

  • Kann man das nicht genauer machen, das ist ja schlimm.
    Ich würde ja auch das nehmen:

    [autoit]

    TrayTip("", "SciTE On", 5)
    Sleep(2000)
    TrayTip("", "", 0)

    [/autoit]

    Aber mein Code muss nebenbei weiterlaufen, da kann ich nicht 2 Sekunden warten.

    • Offizieller Beitrag

    Dann vielleicht so:

    Spoiler anzeigen
    [autoit]


    Global $SaveSciTEOn = False, $SaveSciTEOff = False
    While 1

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

    If StringInStr(WinGetTitle("[active]"), "SciTE") And Not $SaveSciTEOn Then
    TrayTip("", "SciTE On", 5)
    AdlibEnable("_TrayTipOff", 2000)
    $SaveSciTEOff = False
    $SaveSciTEOn = True
    EndIf

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

    If Not StringInStr(WinGetTitle("[active]"), "SciTE") And Not $SaveSciTEOff Then
    TrayTip("", "SciTE Off", 5)
    AdlibEnable("_TrayTipOff", 2000)
    $SaveSciTEOn = False
    $SaveSciTEOff = True
    EndIf

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

    WEnd

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

    Func _TrayTipOff()
    AdlibDisable()
    TrayTip("", "", 0)
    EndFunc ;==>_TrayTipOff

    [/autoit]
  • Aaaahhh funktioniert danke.
    Funktioniert AdLibEnable so: AdLibEnable wird aufgerufen im Script, die 2 Sekunden werden gestartet. Während die Zeit läuft, läuft trotzdem der Rest vom Script weiter. Wenn dann die 2 Sekunden erreicht wurdenläuft kurz die Funktion von AdLibEnable. Also nicht so wie bei Sleep, dass das Script pausiert?

    Und das [active] kann man doch eigentlich weglassen oder? Weil der nimmt doch sowieso immer das letzte aktive Fenster.

    • Offizieller Beitrag

    Ja, genau! Adlib läuft sozusagen nebenher. Die Funktion wird nach 2 Sekunden aufgerufen, in der dann Adlib beendet wird und der TrayTip geschlossen.

    [active] kannst Du weglassen, stimmt!
    Das hatte ich nur damit getestet, weil bei mir erst kein TrayTip angezeigt wurde. Lag aber daran, dass das in der Reg deaktiviert war.

  • Ah ok gut.

    Hier mein ganzer Code, wozu ich da eigentlich brauche:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("SendKeyDelay", 1)

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

    Global $SaveSciTEOn = False, $SaveSciTEOff = False, $dll = DllOpen("user32.dll")

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

    While 1

    If StringInStr(WinGetTitle(""), "SciTE") Then
    If _IsPressed("32", $dll) Then
    Send("{BACKSPACE}")
    Send('"')
    EndIf
    If _IsPressed("34", $dll) Then
    Send("{BACKSPACE}")
    Send("$")
    EndIf
    EndIf

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

    If StringInStr(WinGetTitle(""), "SciTE") And Not $SaveSciTEOn Then
    Beep(1000, 200)
    TrayTip("Info", "SciTE Tastaturlayout wird verwendet!", 5, 17)
    AdlibEnable("_TrayTipOff", 3000)
    $SaveSciTEOff = False
    $SaveSciTEOn = True
    ElseIf Not StringInStr(WinGetTitle(""), "SciTE") And Not $SaveSciTEOff Then
    Beep(1000, 200)
    TrayTip("Info", "Standard Tastaturlayout wird verwendet!", 5, 17)
    AdlibEnable("_TrayTipOff", 3000)
    $SaveSciTEOn = False
    $SaveSciTEOff = True
    EndIf

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

    WEnd

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

    Func _TrayTipOff()
    AdlibDisable()
    TrayTip("", "", 0)
    EndFunc ;==>_TrayTipOff

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

    DllClose($dll)

    [/autoit]

    Das Tool bau ich mir um nicht dauernd wenn ich Variablen oder Strings schreibe, die Shift-Taste zu betätigen, weil ich die Zahlen sowieso nicht benutze, sondern meistens nur das Numpad.

    Wenn nix zu bemängeln gibt, werde ich mich mal an die Benutzeroberfläche ranmachen.

  • Morgen,

    ich ab nochmal meinen Code geändert:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("SendKeyDelay", 1)

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

    Global $SaveSciTEOn = False, $SaveSciTEOff = False, $dll = DllOpen("user32.dll")

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

    While 1

    If WinActive("[CLASS:SciTEWindow]", "") Then
    If _IsPressed("32", $dll) Then
    Send("{BACKSPACE}")
    Send('"')
    EndIf
    If _IsPressed("34", $dll) Then
    Send("{BACKSPACE}")
    Send("$")
    EndIf
    EndIf

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

    If WinActive("[CLASS:SciTEWindow]", "") And Not $SaveSciTEOn Then
    Beep(1000, 200)
    TrayTip("Info", "SciTE Tastaturlayout wird verwendet!", 5, 17)
    AdlibEnable("_TrayTipOff", 3000)
    $SaveSciTEOff = False
    $SaveSciTEOn = True
    ElseIf Not WinActive("[CLASS:SciTEWindow]", "") And Not $SaveSciTEOff Then
    Beep(1000, 200)
    TrayTip("Info", "Standard Tastaturlayout wird verwendet!", 5, 17)
    AdlibEnable("_TrayTipOff", 3000)
    $SaveSciTEOn = False
    $SaveSciTEOff = True
    EndIf

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

    WEnd

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

    Func _TrayTipOff()
    AdlibDisable()
    TrayTip("", "", 0)
    EndFunc ;==>_TrayTipOff

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

    DllClose($dll)

    [/autoit]

    Vorher hatte ich anstatt

    [autoit]

    WinActive("[CLASS:SciTEWindow]", "")

    [/autoit]


    dass

    [autoit]

    StringInStr(WinGetTitle(""), "SciTE")

    [/autoit]

    Das erste mit CLASS ist doch besser, weil wenn bei dem zweiten z.B. mal ein Browser eine Seite hätte wo im Titel SciTE drin vorkommt, nimmt er dann das sofort. Aber er soll ja nur auf das richtige Programmfenster von SciTE reagieren. Oder was sagt ihr dazu?

  • Hi,
    also dein Script frisst ziemlich viel Prozessor.
    Ich würde da eher Hotkeyset benutzen ...

    z.B.:

    Spoiler anzeigen
    [autoit]

    Global $send = True, $send2 = True

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

    While 1
    If WinActive("[CLASS:SciTEWindow]", "") Then
    If $send Then
    HotKeySet("{2}", "_send2")
    HotKeySet("{4}", "_send")
    $send = False
    $send2 = True
    EndIf
    ElseIf $send2 Then
    HotKeySet("{2}")
    HotKeySet("{4}")
    $send2 = False
    $send = True
    EndIf

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

    Sleep(50)
    WEnd

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

    Func _send()
    Send("$")
    EndFunc ;==>_send

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

    Func _send2()
    Send('"')
    EndFunc ;==>_send2

    [/autoit]
  • Ich find meins besser. Ich glaube du hast noch nicht verstanden, was das Tool machen soll.

    Das Tool bau ich mir um nicht dauernd wenn ich Variablen oder Strings schreibe, die Shift-Taste zu betätigen, weil ich die Zahlen sowieso nicht benutze, sondern meistens nur das Numpad. Wenn ich z.B. die Taste 2 betätige, soll er nicht die zwei schreiben, sonder die Anführungszeichen.

  • sry, der Code sah aus, als wenn er dass nicht macht, was ich brauche ^^ . Die HotKeySet's ohne Funktionsangabe hatten mich irritiert.

    Aber ich hab gemerkt, er macht genau das was ich brauche.

    Aber ich hab noch ne kleine Änderung:

    [autoit]

    While 1

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

    If WinActive("[CLASS:SciTEWindow]", "") Then
    HotKeySet("{2}", "_send2")
    HotKeySet("{4}", "_send")
    Else
    HotKeySet("{2}")
    HotKeySet("{4}")
    EndIf

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

    Sleep(50)
    WEnd

    [/autoit]
  • Achja, hatte ich ja bei meinem restlichen Code auch gemacht :P .

    Hier nun mein aktueller Code:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

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

    Opt("MustDeclareVars", 1)

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

    Global $StandardModeOn = True, $StandardModeOff = True

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

    While 1

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

    If WinActive("[CLASS:SciTEWindow]", "") Then
    If $StandardModeOff Then
    HotKeySet("{2}", "_send2")
    HotKeySet("{4}", "_send")
    Beep(1000, 200)
    TrayTip("Info", "SciTE Tastaturlayout wird verwendet!", 5, 17)
    AdlibEnable("_TrayTipOff", 3000)
    $StandardModeOff = False
    $StandardModeOn = True
    EndIf
    ElseIf $StandardModeOn Then
    HotKeySet("{2}")
    HotKeySet("{4}")
    Beep(1000, 200)
    TrayTip("Info", "Standard Tastaturlayout wird verwendet!", 5, 17)
    AdlibEnable("_TrayTipOff", 3000)
    $StandardModeOn = False
    $StandardModeOff = True
    EndIf

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

    WEnd

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

    Func _TrayTipOff()
    AdlibDisable()
    TrayTip("", "", 0)
    EndFunc ;==>_TrayTipOff

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

    Func _send()
    Send("$")
    EndFunc ;==>_send

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

    Func _send2()
    Send('"')
    EndFunc ;==>_send2

    [/autoit]
  • Jetzt fehlt noch ein Sleep(10) am Ende der While-Schleife und dann stimmts. Im Moment frissts verdammt viel CPU.

    Ansonsten nervt das Gepiepe und ich hab auch keine TrayTips an, dann machts immer nur *BLUB* :P.

    Aber ist ne nette Idee, aber ich glaube es dauert länger bis ich mich dadran gewähnt hab, die 2 ohne Shift zu drücken, als es von nutzen wäre.

    :thumbup:

  • Ich vergess immer dieses sch*** Sleep :wacko: .

    Also mir geht das Gepipe nicht auf die nerven, und außerdem soll das ja Hinweise sein. Aber ich bin auch schon dabei, dafür eine GUI zu schreiben, dort könnt ich ja eine Käckchen-Option machen, ob man die Hinweise haben möchte oder nicht. Und außerdem möchte ich es für mehrere Programme machen, dass man dann selber festlegen kann, welche HotKeys man wo haben möchte.

    Edit: Tööörrröööö - 200er Post :thumbup: