Ereignisse auslösen wenn Programm im Hintergrund ist

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    Jetz überleg doch ma:
    Was macht dein Sleep? Dein Programm wird, wie @EDR gesagt hat für 200ms ins Koma geschickt. Das heißt, die sendkeys werden verzögert, damit sie in dem Ziel-Thread des Programms, an das gesendet wird, ankommen, bevor der nächste SendKeys kommt. Was spricht also dagegen, einen (1) Timer mit enem Interval von 200ms in jedem Tick immer genau 1 Char zu senden. Das passiert alle 200ms. Das iat mit Sleep absolut identisch, nur das deine Anwendung nicht ins Koma geschickt wird, sondern weiter auf Button-Klicks und dergleichen reagieren kann, nämlich genau zwischen den Ticks.
    Es gibt immer ne andere Lösung, immer....
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    ErfinderDesRades schrieb:

    Devilos schrieb:

    Die Lösung gab mir dann RodFromGermany. Und das hat wirklich super funktioniert
    Ja, wie super, das sehen wir hier.

    Devilos schrieb:

    deswegen kann ich nicht jeden Buchstaben einzeln als sendkey angeben und danach nen sleep machen.

    Sagte ich das schon? Sleep soll man niemals machen. Niemals!

    Wenn du alle 200ms einen buchstaben schicken willst, dann stell einen timer halt auf 200ms, und lass ihn jedesmal einen buchstaben schicken, bis die buchstaben alle sind.
    Vielleicht ist Queue(Of Char) dein Freund, da könnteman vorne buchstaben einfüllen, und hinten buchstaben entnehmen - pufferung nenntman sowas.
    Ja das mit Timer Interval auf 200ms wäre super wenn ich wüsste was der Benutzer in die Textbox schreibt ;)...hab ich auch schon erwähnt.

    Vatter schrieb:

    Jetz überleg doch ma:
    Was macht dein Sleep? Dein Programm wird, wie @EDR gesagt hat für 200ms ins Koma geschickt. Das heißt, die sendkeys werden verzögert, damit sie in dem Ziel-Thread des Programms, an das gesendet wird, ankommen, bevor der nächste SendKeys kommt. Was spricht also dagegen, einen (1) Timer mit enem Interval von 200ms in jedem Tick immer genau 1 Char zu senden. Das passiert alle 200ms. Das iat mit Sleep absolut identisch, nur das deine Anwendung nicht ins Koma geschickt wird, sondern weiter auf Button-Klicks und dergleichen reagieren kann, nämlich genau zwischen den Ticks.
    Es gibt immer ne andere Lösung, immer....
    1.) Nein Funktioniert nicht, hab ich grad ausprobiert er lässt mich mein Programm nicht mal von der Taskleiste aus öffnen und auch mit Alt+Tab funkt es nicht.

    2.) Selbst wenn es funktioniert gäbe es noch nen Haken bei der Sache. Ich muss dann innerhalb von 200ms zum IE wechseln, da der Bot sonnst ohne mich anfängt und jeder Buchstabe verschiebt sich um eins, was bedeutet ich hätte dann saumäßig viele Fehler ;)

    edit: @all

    Ich hab ja auch noch ne andere Form mit Lektionenübersicht. Mit vielen Buttons. Jeder Button ist eine Lektion. Wenn man auf die draufklickt, soll das Programm genau die sendkeys senden, die die Lektion braucht.
    bzw. in die Textboxen kommt dann halt der Text von der Lektion. Und jeder Absatz in eine andere Textbox da sonnst das mit dem ENTER auf der easy Typing seite nicht richtig funktioniert.

    Proggt doch mal n Bot für die Seite und testet es (Funktioniert nur Mit Internet Explorer). Dann versteht ihr was ich meine...das wird nicht funktionieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Devilos“ ()

    Es steht dir natürlich frei, das Gegenteil zu behaupten und ich weis auch nicht was du probiert hast. Ich weis auch nicht, wo dein Code zum IE wechselt?
    Aber schau dir mal meinen Code an. Der macht eigentlich genau das, was du mit 1001 Timer erledigst.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ublic Class TestFrm1
    2. Dim Stringarray(2) As String 'Array entsprechend der Anzahl der Textboxen initialisieren
    3. Dim CharIndex As Integer 'Zähler für die einzelnen Chars
    4. Dim ArrayIndex As Integer 'Zähler für die einzelnen Strings
    5. Private Sub Btn_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Start.Click
    6. Senden()
    7. End Sub
    8. 'Diese Sub startet den Sendevorgang
    9. Sub Senden()
    10. 'alle Controls der Form durchlaufen
    11. ArrayIndex = 0
    12. For Each c As Control In Me.Controls
    13. If TypeOf c Is TextBox Then 'Wenn C eine Textbox ist,
    14. Stringarray(ArrayIndex) = CType(c, TextBox).Text 'Text dem Array hinzufügen
    15. ArrayIndex += 1 'Arrayindex für nächsten String erhöhen
    16. End If
    17. Next
    18. ArrayIndex = 0
    19. CharIndex = 0
    20. Me.Text = ""
    21. Tmr_Senden.Interval = 200
    22. Tmr_Senden.Start()
    23. End Sub
    24. Private Sub Tmr_Senden_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tmr_Senden.Tick
    25. Dim Ch As Char
    26. If Stringarray(ArrayIndex).Length > 0 Then 'Wenn String länger 0 Zeichen
    27. If CharIndex < Stringarray(ArrayIndex).Count Then 'Ist Charindex < als Stringlänge?
    28. Ch = Stringarray(ArrayIndex).Chars(CharIndex) 'Ein Char aus dem String holen
    29. 'Sendkeys Char
    30. Me.Text &= Ch
    31. CharIndex += 1 'Index für nächstes Zeichen erhöhen
    32. ElseIf CharIndex = Stringarray(ArrayIndex).Count Then 'Der String ist fertig gesendet
    33. '1. Enter senden
    34. 'Sendkeys ente
    35. Me.Text &= "Ente1; "
    36. CharIndex += 1 'Index für nächste Aktion erhöhen
    37. 'Sendkeys ente
    38. ElseIf CharIndex = Stringarray(ArrayIndex).Count + 1 Then 'Der String und 1 Enter sind fertig gesendet
    39. '2. Enter senden
    40. 'Sendkeys ente
    41. Me.Text &= "Ente2; "
    42. CharIndex = 0 'Index für nächsten String Reseten
    43. ArrayIndex += 1 'Arrayindex für nächsten String setzen
    44. End If
    45. Else
    46. 'Ein leerer String brauch nicht gesendet werden
    47. CharIndex = 0 'Index für nächsten String Reseten
    48. ArrayIndex += 1 'Arrayindex für nächsten String setzen
    49. End If
    50. If ArrayIndex + 1 > Stringarray.Count Then
    51. 'Wenn alle Strings gesendet wurden
    52. Tmr_Senden.Stop()
    53. End If
    54. End Sub
    55. End Class


    Fiel Fergnügen beim Testen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: