Ereignisse auslösen wenn Programm im Hintergrund ist

  • VB.NET

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

    Ereignisse auslösen wenn Programm im Hintergrund ist

    Abend Com

    Habe wieder ein Problem.

    Und zwar sollen Tastendrucks bestimmte Ereignise auslösen, auch wenn das Programm im Hintergrund ist...geht das?


    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown If Keys.F9 And Timer1.Enabled = False Then Button1.Enabled = False Button2.Enabled = True Timer1.Start() Else Button1.Enabled = True Button2.Enabled = False Timer1.Stop() End If If Keys.F10 Then Me.Close() End If End Sub



    Das wäre mein Coding welches funktionieren soll wenn sich mein Vb Programm im Hintergrund befindet und ein anderes Fenster aktiv ist.
    So geht das nicht, denn Windows leitet die Tastendrücke an dasjenige Fenster, das den Fokus hat, also nicht Deins.
    Wenn Du alle Tastendrücke abfangen willst, sieh mal im Forum nach unter Tastendrücke systemweit abfangen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hm..dann hab ich aber noch ne andere Frage. Weiß nicht ob das jetzt erlaubt ist in einem Beitrag zwei Fragen zu stellen, aber ich versuchs mal.

    Und zwar:

    Hab ja in letzter sämtliche Fragen über sendkeys gehabt und wenn ich diese nun mit einem Timer starte (Interval 1sek glaub ich), dann schreibt er ja den Text von Textbox 1 (siehe Beitrag: [VB 2010] Sendkeys langsamer simulieren) und zwar in ein anderes Fenster z.B. notepad++. Will ich jetzt aber das Programm schließen, so muss ich immer auf mein Programm wechseln, und dann schreibt es aber noch immer und ich kann jetzt fast nix machen in meinem Programm. Ich muss immer par mal auf schließen in der Taskleiste klicken, damit er endlich mal reagiert. Das ist ganz schön nervig, weil ich manchmal auch nur den Timer kurz stopen will und nicht gleich das ganze Programm beenden nur weil es sich aufhängt mit den blöden sendkeys.

    Gibt es dafür ne andere Lösung um die sendkeys zu beenden oder so ohne das sich mein Programm sofort aufhängt wenn ich zu dem wechsel?

    Lg Devilos
    Offenbar blockiert dein Timer den kompletten Haupt-Thread. Wenn du nur alle 1 Sekunde nen Tick brauchst, solltest du auch den Timer so einstellen. Ich vermute mal einen extrem kurzen Interval und ne Zählervariable bei dir.
    Ansonsten müsstest du dich ma mit Multithreading, Backgroundworker usw. auseinandersetzen.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Mach Dir einen Button in die Form und in deren Click-Ereignis beende den Timer.
    Kann es sein, dass Du riesige Texte sendest und zwischen 2 Sendungen nur ein Sleep(n) machst?
    füge da mal das hier ungeliebte DoEvents() mit ein, da sollte Dein Programm flüssiger reagieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    es ist ja nicht der Timer der das Programm blockiert sondern die sendkeys. Denn wenn der Timer tickt, stoppe ich ihn sofort wieder, doch er schreibt dennoch zuerst die sendkeys fertig (das will ich aber auch so haben). Doch sollange die sendkeys nicht fertig geschrieben sind kann ich in meinem Programm nix machen...bzw. es hängt sich komplett auf wenn ich rüber wechsle. z.B. gibt er mir immer die Meldung: "Das Programm reagiert nicht mehr" usw...

    VB.NET-Quellcode

    1. Public Class Form1 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick For Each cc As Char In TextBox1.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox2.Text = "" Then Timer1.Stop() Timer2.Stop() wichtig1.Stop() wichtig2.Stop() End If Timer1.Stop() End Sub
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Start() wichtig1.Start() Button1.Enabled = False Button2.Visible = True Button2.Enabled = True End Sub
    3. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Timer1.Stop() Timer2.Stop() Timer3.Stop() Timer4.Stop() Timer5.Stop() Timer6.Stop() Timer7.Stop() Timer8.Stop() Timer9.Stop() wichtig1.Stop() wichtig2.Stop() wichtig3.Stop() wichtig4.Stop() wichtig5.Stop() wichtig6.Stop() wichtig7.Stop() wichtig8.Stop() wichtig9.Stop() Button1.Enabled = True Button2.Enabled = False End Sub
    4. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Form2.Show() End Sub
    5. Private Sub wichtig_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig1.Tick If Timer1.Enabled = False Then Timer2.Start() wichtig2.Start() wichtig1.Stop() End If End Sub
    6. Private Sub wichtig2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig2.Tick If Timer2.Enabled = False Then Timer3.Start() wichtig3.Start() wichtig2.Stop() End If End Sub
    7. Private Sub wichtig3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig3.Tick If Timer3.Enabled = False Then Timer4.Start() wichtig4.Start() wichtig3.Stop() End If End Sub
    8. Private Sub wichtig4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig4.Tick If Timer4.Enabled = False Then Timer5.Start() wichtig5.Start() wichtig4.Stop() End If End Sub
    9. Private Sub wichtig5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig5.Tick If Timer5.Enabled = False Then Timer6.Start() wichtig6.Start() wichtig5.Stop() End If End Sub
    10. Private Sub wichtig6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig6.Tick If Timer6.Enabled = False Then Timer7.Start() wichtig7.Start() wichtig6.Stop() End If End Sub
    11. Private Sub wichtig7_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig7.Tick If Timer7.Enabled = False Then Timer8.Start() wichtig8.Start() wichtig7.Stop() End If End Sub
    12. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick For Each cc As Char In TextBox2.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox3.Text = "" Then Timer2.Stop() Timer3.Stop() wichtig2.Stop() wichtig3.Stop() End If Timer2.Stop()
    13. End Sub
    14. Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick For Each cc As Char In TextBox3.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox4.Text = "" Then Timer3.Stop() Timer4.Stop() wichtig3.Stop() wichtig4.Stop() End If Timer3.Stop()
    15. End Sub
    16. Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick For Each cc As Char In TextBox4.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox5.Text = "" Then Timer4.Stop() Timer5.Stop() wichtig4.Stop() wichtig5.Stop() End If Timer4.Stop()
    17. End Sub
    18. Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick For Each cc As Char In TextBox5.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox6.Text = "" Then Timer5.Stop() Timer6.Stop() wichtig5.Stop() wichtig6.Stop() End If Timer5.Stop() End Sub
    19. Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick For Each cc As Char In TextBox6.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox7.Text = "" Then Timer6.Stop() Timer7.Stop() wichtig6.Stop() wichtig7.Stop() End If Timer6.Stop() End Sub Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown If Keys.F9 And Timer1.Enabled = False Then Button1.Enabled = False Button2.Enabled = True Timer1.Start() Else Button1.Enabled = True Button2.Enabled = False Timer1.Stop() End If If Keys.F10 Then Me.Close() End If End Sub Private Sub Timer7_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer7.Tick For Each cc As Char In TextBox7.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox8.Text = "" Then Timer7.Stop() Timer8.Stop() wichtig7.Stop() wichtig8.Stop() End If Timer7.Stop() End Sub
    20. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    21. End Sub
    22. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Form3.Show() End Sub
    23. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click Timer1.Stop() Timer2.Stop() Timer3.Stop() Timer4.Stop() Timer5.Stop() Timer6.Stop() Timer7.Stop() Timer8.Stop() Timer9.Stop() wichtig1.Stop() wichtig2.Stop() wichtig3.Stop() wichtig4.Stop() wichtig5.Stop() wichtig6.Stop() wichtig7.Stop() wichtig8.Stop() wichtig9.Stop() Close() End Sub
    24. Private Sub Timer9_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer9.Tick For Each cc As Char In TextBox9.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") Timer9.Stop() End Sub
    25. Private Sub Timer8_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer8.Tick For Each cc As Char In TextBox8.Text SendKeys.Send(cc) System.Threading.Thread.Sleep(200) Next SendKeys.Send("{ENTER}") SendKeys.Send("{ENTER}") If TextBox9.Text = "" Then Timer8.Stop() Timer9.Stop() wichtig8.Stop() wichtig9.Stop() End If Timer8.Stop() End Sub
    26. Private Sub wichtig8_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig8.Tick If Timer8.Enabled = False Then Timer9.Start() wichtig9.Start() wichtig8.Stop() End If End Sub



    Ich weiß nicht ob ich einfach zu blöd dafür bin oder ob das an was anderen liegt, aber ich bekomm das mit den absätzen nicht auf die reihe. Ich kopiere den Code von VB und füge ihn hier ein, makiere ihn hier nochmals und klicke dann auf auf das "VB (Visual Basic Quellcode)"...wenn ich es jetzt absende oder auf Vorschau klicke macht er keine absätze -.-
    Haste im Editor ma auf den Tab Quellcode umgeschaltert?


    Edit:
    Was ich da sehe is ne For Each-Schleife, die die Chars aus der Textbox holt und dann mit Sleep(2000) wartet (und damit deine Anwendung blockierst).
    Also entweder auslagern in einen anneren Thread oder eine globale Zählervariable für das zu sendene Zeichen und bei jedem Tick (alle 2000ms) dieses Zeichen senden.
    da sind auch für meine Begriffe äußerst viele Timer drin. Isn das nötich? Letztlich können alle Aktionen in einem Thread sowieso nur nacheinander durchgeführt werden. Diese Aktionen solltest du ordnen und dann in 1 Timer, der einzelne Subs aufruft (z.B. je nach Zählerstand) durchführen. Des wird auch übergesichtlicherer.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

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

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    3. For Each cc As Char In TextBox1.Text
    4. SendKeys.Send(cc)
    5. System.Threading.Thread.Sleep(200)
    6. Next
    7. SendKeys.Send("{ENTER}")
    8. SendKeys.Send("{ENTER}")
    9. If TextBox2.Text = "" Then
    10. Timer1.Stop()
    11. Timer2.Stop()
    12. wichtig1.Stop()
    13. wichtig2.Stop()
    14. End If
    15. Timer1.Stop()
    16. End Sub
    17. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    18. Timer1.Start()
    19. wichtig1.Start()
    20. Button1.Enabled = False
    21. Button2.Visible = True
    22. Button2.Enabled = True
    23. End Sub
    24. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    25. Timer1.Stop()
    26. Timer2.Stop()
    27. Timer3.Stop()
    28. Timer4.Stop()
    29. Timer5.Stop()
    30. Timer6.Stop()
    31. Timer7.Stop()
    32. Timer8.Stop()
    33. Timer9.Stop()
    34. wichtig1.Stop()
    35. wichtig2.Stop()
    36. wichtig3.Stop()
    37. wichtig4.Stop()
    38. wichtig5.Stop()
    39. wichtig6.Stop()
    40. wichtig7.Stop()
    41. wichtig8.Stop()
    42. wichtig9.Stop()
    43. Button1.Enabled = True
    44. Button2.Enabled = False
    45. End Sub
    46. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    47. Form2.Show()
    48. End Sub
    49. Private Sub wichtig_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig1.Tick
    50. If Timer1.Enabled = False Then
    51. Timer2.Start()
    52. wichtig2.Start()
    53. wichtig1.Stop()
    54. End If
    55. End Sub
    56. Private Sub wichtig2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig2.Tick
    57. If Timer2.Enabled = False Then
    58. Timer3.Start()
    59. wichtig3.Start()
    60. wichtig2.Stop()
    61. End If
    62. End Sub
    63. Private Sub wichtig3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig3.Tick
    64. If Timer3.Enabled = False Then
    65. Timer4.Start()
    66. wichtig4.Start()
    67. wichtig3.Stop()
    68. End If
    69. End Sub
    70. Private Sub wichtig4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig4.Tick
    71. If Timer4.Enabled = False Then
    72. Timer5.Start()
    73. wichtig5.Start()
    74. wichtig4.Stop()
    75. End If
    76. End Sub
    77. Private Sub wichtig5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig5.Tick
    78. If Timer5.Enabled = False Then
    79. Timer6.Start()
    80. wichtig6.Start()
    81. wichtig5.Stop()
    82. End If
    83. End Sub
    84. Private Sub wichtig6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig6.Tick
    85. If Timer6.Enabled = False Then
    86. Timer7.Start()
    87. wichtig7.Start()
    88. wichtig6.Stop()
    89. End If
    90. End Sub
    91. Private Sub wichtig7_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig7.Tick
    92. If Timer7.Enabled = False Then
    93. Timer8.Start()
    94. wichtig8.Start()
    95. wichtig7.Stop()
    96. End If
    97. End Sub
    98. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    99. For Each cc As Char In TextBox2.Text
    100. SendKeys.Send(cc)
    101. System.Threading.Thread.Sleep(200)
    102. Next
    103. SendKeys.Send("{ENTER}")
    104. SendKeys.Send("{ENTER}")
    105. If TextBox3.Text = "" Then
    106. Timer2.Stop()
    107. Timer3.Stop()
    108. wichtig2.Stop()
    109. wichtig3.Stop()
    110. End If
    111. Timer2.Stop()
    112. End Sub
    113. Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
    114. For Each cc As Char In TextBox3.Text
    115. SendKeys.Send(cc)
    116. System.Threading.Thread.Sleep(200)
    117. Next
    118. SendKeys.Send("{ENTER}")
    119. SendKeys.Send("{ENTER}")
    120. If TextBox4.Text = "" Then
    121. Timer3.Stop()
    122. Timer4.Stop()
    123. wichtig3.Stop()
    124. wichtig4.Stop()
    125. End If
    126. Timer3.Stop()
    127. End Sub
    128. Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
    129. For Each cc As Char In TextBox4.Text
    130. SendKeys.Send(cc)
    131. System.Threading.Thread.Sleep(200)
    132. Next
    133. SendKeys.Send("{ENTER}")
    134. SendKeys.Send("{ENTER}")
    135. If TextBox5.Text = "" Then
    136. Timer4.Stop()
    137. Timer5.Stop()
    138. wichtig4.Stop()
    139. wichtig5.Stop()
    140. End If
    141. Timer4.Stop()
    142. End Sub
    143. Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick
    144. For Each cc As Char In TextBox5.Text
    145. SendKeys.Send(cc)
    146. System.Threading.Thread.Sleep(200)
    147. Next
    148. SendKeys.Send("{ENTER}")
    149. SendKeys.Send("{ENTER}")
    150. If TextBox6.Text = "" Then
    151. Timer5.Stop()
    152. Timer6.Stop()
    153. wichtig5.Stop()
    154. wichtig6.Stop()
    155. End If
    156. Timer5.Stop()
    157. End Sub
    158. Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick
    159. For Each cc As Char In TextBox6.Text
    160. SendKeys.Send(cc)
    161. System.Threading.Thread.Sleep(200)
    162. Next
    163. SendKeys.Send("{ENTER}")
    164. SendKeys.Send("{ENTER}")
    165. If TextBox7.Text = "" Then
    166. Timer6.Stop()
    167. Timer7.Stop()
    168. wichtig6.Stop()
    169. wichtig7.Stop()
    170. End If
    171. Timer6.Stop()
    172. End Sub
    173. Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    174. If Keys.F9 And Timer1.Enabled = False Then
    175. Button1.Enabled = False
    176. Button2.Enabled = True
    177. Timer1.Start()
    178. Else
    179. Button1.Enabled = True
    180. Button2.Enabled = False
    181. Timer1.Stop()
    182. End If
    183. If Keys.F10 Then
    184. Me.Close()
    185. End If
    186. End Sub
    187. Private Sub Timer7_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer7.Tick
    188. For Each cc As Char In TextBox7.Text
    189. SendKeys.Send(cc)
    190. System.Threading.Thread.Sleep(200)
    191. Next
    192. SendKeys.Send("{ENTER}")
    193. SendKeys.Send("{ENTER}")
    194. If TextBox8.Text = "" Then
    195. Timer7.Stop()
    196. Timer8.Stop()
    197. wichtig7.Stop()
    198. wichtig8.Stop()
    199. End If
    200. Timer7.Stop()
    201. End Sub
    202. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    203. End Sub
    204. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    205. Form3.Show()
    206. End Sub
    207. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    208. Timer1.Stop()
    209. Timer2.Stop()
    210. Timer3.Stop()
    211. Timer4.Stop()
    212. Timer5.Stop()
    213. Timer6.Stop()
    214. Timer7.Stop()
    215. Timer8.Stop()
    216. Timer9.Stop()
    217. wichtig1.Stop()
    218. wichtig2.Stop()
    219. wichtig3.Stop()
    220. wichtig4.Stop()
    221. wichtig5.Stop()
    222. wichtig6.Stop()
    223. wichtig7.Stop()
    224. wichtig8.Stop()
    225. wichtig9.Stop()
    226. Close()
    227. End Sub
    228. Private Sub Timer9_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer9.Tick
    229. For Each cc As Char In TextBox9.Text
    230. SendKeys.Send(cc)
    231. System.Threading.Thread.Sleep(200)
    232. Next
    233. SendKeys.Send("{ENTER}")
    234. SendKeys.Send("{ENTER}")
    235. Timer9.Stop()
    236. End Sub
    237. Private Sub Timer8_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer8.Tick
    238. For Each cc As Char In TextBox8.Text
    239. SendKeys.Send(cc)
    240. System.Threading.Thread.Sleep(200)
    241. Next
    242. SendKeys.Send("{ENTER}")
    243. SendKeys.Send("{ENTER}")
    244. If TextBox9.Text = "" Then
    245. Timer8.Stop()
    246. Timer9.Stop()
    247. wichtig8.Stop()
    248. wichtig9.Stop()
    249. End If
    250. Timer8.Stop()
    251. End Sub
    252. Private Sub wichtig8_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wichtig8.Tick
    253. If Timer8.Enabled = False Then
    254. Timer9.Start()
    255. wichtig9.Start()
    256. wichtig8.Stop()
    257. End If
    258. End Sub
    259. End Class


    Haha geschafft...bin ja so dumm xD

    Danke @Vatter ;)

    edit: ja ich weiß, der code ist etwas unübersichtlich geordnet ^^

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

    Siehe mein Edit oben: Sry, aber das isn gewaltiger Gurkencode.
    Wenn ich das richtig verstanden habe, dann sendest du jede Textbox einzeln nacheinander. Die For Each-Schleifen sorgen für die zeichenweise Ausgabe mit 200ms. Dieser Vorgang wiederholt sich für so geschätzte 9-10 Textboxen.
    Das schreit nach einer Sub, die den salat steuert. Die stellt die Texte der Textboxen z.B. in ein Array (global) und startet genau einen Timer. Der wiederum bekommt eine globale Zählervariable für die Zeichen, 1 Variable für den Array-Index. Der Timer sendet immer das Char, welches aus der Zählervariable des jeweiligen StringArray-Index addressiert wird. Sind nun alle Zeichen gesendet, kommt des annere Gedöhns hinterher und der Arrayindex wird erhöht, der Zähler auf 0 gesetzt. Damit geht der Laden von vorn los. Sind alle Texte aus dem Array gesendet wird der Timer schließlich gestoppt.

    Achso, und Timer.Interval dann auf 200ms, dann kommste da auch immer wieder problemlos raus.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    hm...so weit ich das verstehe hast du mir empfohlen den Timer zu stopen wenn alle Textbox per sendkeys ausgesandt wurden, oder hab ich was falsch verstanden, denn viele der Begriffe sind mir ziemlich unklar sry ;).

    Naja immerhin, ich stope eh alle Timer wenn der Text der letzten Textbox gesandt wurde. Doch das hilft nix, weil ich ja das Programm auch manchmal während es läfut beenden will bzw. den Timer stopen will.

    Devilos schrieb:

    Naja immerhin, ich stope eh alle Timer wenn der Text der letzten Textbox gesandt wurde. Doch das hilft nix, weil ich ja das Programm auch manchmal während es läfut beenden will bzw. den Timer stopen will.

    Und das is ja das Problem: Innerhalb der Timer hast du Schleifen mit Sleep laufen. Damit ist der komplette Hauptthread im Winterschlaf. Da kannst du mit deine Maus auf den Knöppen rumballern, wie de willst. Die Events können während es Schlafs nicht gefeuert werden. Diese Art der Programmierung ist (Sry, nicht persönlich nehmen) Mist.
    Deine Timer die da "wichtig" heißen warten nur darauf, dass ein annerer Timer fertig wird. Du rennst also unaufhöhrlich zwischen Couch und Tür hin und her, um zu schauen, ob die Pizza schon kommt. Dafür gibs doch ne Klingel!

    Auf Timer sollte, soweit dies möglich ist, verzichtet werden, da die eben ständig ihre Events abarbeiten. Jetzt stell dir ma vor, du hast nen Timer mit 1000ms. Jetzt läuft da drin ne ForEach mit nem Sleep von 200ms. Diese Schleife macht wegen langem Text 12 Durchläufe. das sind (12x200ms) = 2400 ms. In dieser Zeit hat dein Timer schon 2x neu sein Tick gefeuert, was dann inner Warteschlange steht, um die Schleife erneut zu starten. Merkst du was?
    Dein Konzept ist untauglich.
    Sich wiederholende Codeteile sollten immer in eine Sub ausgelagert werden, der man dann die jeweils unterschiedlichen Argumente übergibt. Überdenke das mal...
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    ne auf die Timer kann ich leider nicht verzichten. Das ist ja ein Bot für die Seite "easy Typing online Traunauer" oder wie der heißt.

    Und ohne die "wichtig" Timer schafft er es nicht auf der Seite die "ENTERS" richtig zu senden. Habs anders nicht geschafft.

    Wenn ihr wollt könnt ihr es ja ausprobieren, schickt mir einfach ne pn dann send ich euch das Programm. Dann versteht ihr es vielleicht leichter ;). Funkt. nur mit IE.

    Lg Devilos

    Vatter schrieb:

    Auf Timer sollte, soweit dies möglich ist, verzichtet werden, da die eben ständig ihre Events abarbeiten. Jetzt stell dir ma vor, du hast nen Timer mit 1000ms. Jetzt läuft da drin ne ForEach mit nem Sleep von 200ms.

    Grad falschrum. Thread.Sleep sollteman niemals verwenden. Niemals.
    Inne EDV stellt man ein Zeitintervall nicht dadurch dar, dass man die ganze App ins Koma schickt, sondern dass ein Timer zur rechten Zeit tickt.
    die Verwendung von Thread.Sleep deutet daraufhin, dass jmd mit prozeduraler Denke versucht, ein Problem zu lösen, für dass der ereignisorientierte Ansatz angezeigt ist.
    (Und / Oder dass ihm auf VBP ein blöder Tipp gegeben wurde ;) )

    gugge Alles über Events
    aber ne andere Lösung als wie das thread sleep gibts nicht. Denn ich weiß ja nicht was der Benutzer in die Textbox eingibt, deswegen kann ich nicht jeden Buchstaben einzeln als sendkey angeben und danach nen sleep machen.

    Das gleiche hab ich auch hier: [VB 2010] Sendkeys langsamer simulieren erklärt.

    Die Lösung gab mir dann RodFromGermany. Und das hat wirklich super funktioniert, allerdings hat es genau den einen Nachteil, das mein Programm dann nicht mehr reagiert und soweit ich die erklärung von Vatter verstanden hab, gibts dagegen keine Lösung. Ist mir eigentlich auch alles klar was mit da Vatter versucht hat zu erklären.

    Dann bleibt ja nix anderes übrig als einfach so oft und so schnell wie möglichst in der Taskleiste auf schließen zu klicken ;)

    Trotzdem Danke Leute =)

    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.