OldSchoolHack

Register / Login English

[VB08] Timer Frage


icon [VB08] Timer Frage #1

Join Date: Aug 2009

Posts: 21

Hallo...
Hab schon einiges probiert aber ich komm nicht weiter! wie kann ich im folgendem Code ein Timer einbauen? so das er z.b. case 1 oder case 3 immer wieder sendet?

Wenn ich F1 Drücke sendet er den Text auch.. aber ich möchte F1 drücken und dann sendet er alle 30Sek. den Text aus der Textbox...

TEXT Code:
  1. Public Class Form1
  2. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As IntegerPrivate Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
  3. Private Const Key_NONE As Integer = &H0Private Const WM_HOTKEY As Integer = &H312
  4. Protected Overrides Sub WndProc(ByRef m As Message)
  5.  
  6. If m.Msg = WM_HOTKEY Then
  7. Case m.WParam
  8. Case 1
  9. SendKeys.SendWait(TextBox6.Text)
  10. System.Threading.Thread.Sleep(200)
  11. SendKeys.Send(TextBox1.Text)
  12. SendKeys.Send(Label13.Text)
  13. Case 2
  14. SendKeys.SendWait(TextBox6.Text)
  15. System.Threading.Thread.Sleep(200)
  16. SendKeys.Send(TextBox2.Text)
  17. SendKeys.Send(Label14.Text)
  18. Case 3
  19. SendKeys.SendWait(TextBox6.Text)
  20. System.Threading.Thread.Sleep(200)
  21. SendKeys.Send(TextBox3.Text)
  22. SendKeys.Send(Label15.Text)
  23. Case 4
  24. SendKeys.SendWait(TextBox6.Text)
  25. System.Threading.Thread.Sleep(200)
  26. SendKeys.Send(TextBox4.Text)
  27. SendKeys.Send(Label16.Text)
  28. Case 5
  29. SendKeys.SendWait(TextBox6.Text)
  30. System.Threading.Thread.Sleep(200)
  31. SendKeys.Send(TextBox5.Text)
  32. SendKeys.Send(Label17.Text)
  33. End Select
  34. End If
  35. MyBase.WndProc(m)
  36. End Sub
  37.  
  38. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  39. UnregisterHotKey(Me.Handle, 1)
  40. UnregisterHotKey(Me.Handle, 2)
  41. UnregisterHotKey(Me.Handle, 3)
  42. UnregisterHotKey(Me.Handle, 4)
  43. UnregisterHotKey(Me.Handle, 5)
  44. End Sub
  45. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  46.  
  47.  
  48.  
  49. End Sub
  50. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  51. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F1)
  52. RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.F2)
  53. RegisterHotKey(Me.Handle, 3, Key_NONE, Keys.F3)
  54. RegisterHotKey(Me.Handle, 4, Key_NONE, Keys.F4)
  55. RegisterHotKey(Me.Handle, 5, Key_NONE, Keys.F5)
  56. End Sub


icon #2

Join Date: Apr 2010

Posts: 168

1. kein Mensch coded mit VB ^^

2. Bau dir eine Class "Timer" und die hat dann ein 2. Thread mit ner schleife und eine variable mit der Timer-Zeit und dem Pointer auf die Func die es am ende aufrufen soll, bzw. den Code den es ausführen soll (delegate)

3. VB SUX


Edit: wenn du lieb fragst kriegst ein beispiel in C#

Hier "Marke EIGENBAU" vor ein paar Jahren

Spoiler

TEXT Code:
  1.  
  2. // < ------------------------------------------------- >
  3. // < XLib.Timer.cs / C#.Net / 18.03.2007 / ZeRoKiLLeR >
  4. // < ------------------------------------------------- >
  5.  
  6. using System;
  7. using System.Threading;
  8.  
  9. namespace XLib
  10. {
  11. public class Timer
  12. {
  13. /// <summary>
  14. /// Duration in ms
  15. /// </summary>
  16. private Double m_Duration;
  17.  
  18. /// <summary>
  19. /// Time left in ms
  20. /// </summary>
  21. private Double m_TimeLeft;
  22.  
  23. /// <summary>
  24. /// Target method/function after timer finished
  25. /// </summary>
  26. private TargetFunction m_Target;
  27.  
  28. /// <summary>
  29. /// Tick thread
  30. /// </summary>
  31. private Thread m_TickThread;
  32.  
  33. /// <summary>
  34. /// State if timer is running
  35. /// </summary>
  36. private Boolean m_Running;
  37.  
  38. /// <summary>
  39. /// Creates a new timer instance
  40. /// </summary>
  41. /// <param name="duration">Duration in ms</param>
  42. /// <param name="target">Target method/function</param>
  43. public Timer(Double duration, TargetFunction target)
  44. {
  45. try
  46. {
  47. // Set values
  48. this.m_Duration = duration;
  49. this.m_TimeLeft = 0;
  50. this.m_Target = target;
  51. this.m_TickThread = null;
  52. this.m_Running = false;
  53. }
  54. catch (Exception exc)
  55. {
  56. // Handle Errors here
  57. }
  58. }
  59.  
  60. /// <summary>
  61. /// Starts the timer
  62. /// </summary>
  63. public void Start()
  64. {
  65. try
  66. {
  67. // If timer is not running
  68. if (!this.m_Running)
  69. {
  70. this.m_TickThread = new Thread(new ThreadStart(this.Tick));
  71. this.m_TickThread.Name = "XLib.Timer | Tick-Thread";
  72. this.m_TickThread.Start();
  73. this.m_Running = true;
  74. }
  75. }
  76. catch (Exception exc)
  77. {
  78. // Handle Errors here
  79. }
  80. }
  81.  
  82. /// <summary>
  83. /// Stopps the timer
  84. /// </summary>
  85. public void Stop()
  86. {
  87. try
  88. {
  89. // If timer is running
  90. if (this.m_Running)
  91. {
  92. // this.m_TickThread.Abort(); -> Throw exception "AbortException" ...
  93.  
  94. this.m_Running = false; // <- FIX
  95.  
  96. }
  97. }
  98. catch (Exception exc)
  99. {
  100. // Handle Errors here
  101. }
  102. }
  103.  
  104. /// <summary>
  105. /// Pause the imer
  106. /// </summary>
  107. public void Pause()
  108. {
  109. try
  110. {
  111. // If timer is running
  112. if (this.m_Running)
  113. {
  114. this.m_Running = false;
  115. }
  116. }
  117. catch (Exception exc)
  118. {
  119. // Handle Errors here
  120. }
  121. }
  122.  
  123. /// <summary>
  124. /// Tick method
  125. /// </summary>
  126. private void Tick()
  127. {
  128. try
  129. {
  130. // Endless loop
  131. while (true)
  132. {
  133. // If timer is running
  134. if (this.m_Running)
  135. {
  136. if (this.m_TimeLeft < this.m_Duration)
  137. {
  138. this.m_TimeLeft += 100;
  139. }
  140. else
  141. {
  142. this.m_Target.Invoke();
  143. this.m_Running = false;
  144. }
  145. }
  146.  
  147. // Pause thread for 100ms
  148. Thread.Sleep(TimeSpan.FromMilliseconds(100));
  149. }
  150. }
  151. catch (Exception exc)
  152. {
  153. // Handle Errors here
  154. }
  155. }
  156.  
  157. public delegate void TargetFunction();
  158. }
  159. }
  160.  

Und wenn du das nicht kapierst dann schau mal bei MSDN -> dotNet Timer. Evtl. kannst den ja gebrauchen

__________________

mfg ZeRoKiLLeR

*Hax? Nur solange man mit Hack besser als ohne ist * :schaden:

Only registered and activated users can see links.

Let's Rock ! :schaden:
icon #3

Join Date: Aug 2009

Posts: 21

Ich schreibe in VB
kannst du mir das bitte mal genauer erkären, versteh nicht was du mir damit sagen willst?

Ich möchte nur das Case1 alle 30Sek gesendet wird.

Kannst du mir bitte mal dein beispiel zeigen! debugen!
icon #4

Join Date: Apr 2010

Posts: 168

Naja ein Timer bedingt sauberes Coden oder Multithreading

__________________

mfg ZeRoKiLLeR

*Hax? Nur solange man mit Hack besser als ohne ist * :schaden:

Only registered and activated users can see links.

Let's Rock ! :schaden:
icon #5

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
du programmierst doch sicher mit Formen, warum ziehst du dann nicht einfach einen Timer auf die Form?

greetz KN4CK3R

__________________

Hallo
icon #6

Join Date: Aug 2008

Posts: 2594

User-Rating:

17 positive
5 negative
Mach so wie KN4CK3R gesagt hab und zieh 2 Timer hin, dann machst du bei dem ersten Timer enable=true und Interval=100, dort machst du deine Hotkey abfrage. Bei dem 2ten Timer Enable=false, Interval=30000 dort machst du halt das rein was jede 30sek passieren soll. Dann unter dem Case1 machst du ganz einfach Timer2->Enabled=true.

Ich kann dir leider kein Beispiel aufschreiben da ich nur in C++ Programmiere oder wenn es auch sein muss kenn ich mich noch von früher mit AutoIt aus aber VB ist für uns keine Programmiersprache. Wenn C++ nicht lernen will aber was einfaches Programmieren will, kann man mit der ScriptSprache AutoIt was sehr viel machen, ist noch einfacher als VB und mit AutoIT kann man mindestens so viel Machen wie mit VB wenn nicht mehr.

icon #7

Join Date: Apr 2010

Posts: 168

Um KN4CK3Rs Variante umzusetzen benötigst du das hier: Only registered and activated users can see links.

Ein kleines Beispiel für dich:

CPP Code:
  1.  
  2. void Main()
  3. {
  4. // Ist C#.Net, da ich kein VB programmiere
  5.  
  6. // Deklaration
  7. System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
  8. System.Windows.Forms.Timer timer2 = new System.Windows.Forms.Timer();
  9.  
  10. // Interval
  11. timer1.Interval = 100;
  12. timer2.Interval = 30000;
  13.  
  14. // Events definieren
  15. timer1.Tick += new EventHandler(Function1);
  16. timer2.Tick += new EventHandler(Function2);
  17.  
  18. // Hotkey-Timier aktivieren
  19. timer1.Start();
  20. }
  21.  
  22. // Hotkeys
  23. void Function1()
  24. {
  25. // Wenn Hotkey AN
  26. timer2.Start();
  27.  
  28. // oder Hotkey AUS
  29. timer2.Stop();
  30. }
  31.  
  32. // Case-1
  33. void Function2()
  34. {
  35. // Dein Case1 Code
  36. }
  37.  

Hoffe man verstehts, is mit iPhone geschrieben  :schaden:

__________________

mfg ZeRoKiLLeR

*Hax? Nur solange man mit Hack besser als ohne ist * :schaden:

Only registered and activated users can see links.

Let's Rock ! :schaden:
icon #8

Join Date: Aug 2008

Posts: 2594

User-Rating:

17 positive
5 negative
Nö! Das was KN4CK3R gemeint ist das hier, es ist viel leichter man muss fast nichts selber schreiben.
Only registered and activated users can see links.
Es ist VC++, bei VB sieht es aber genau so aus. Und fast jeder der mit VB arbeitet benutzt Windows-Forms, besonders die anfänger, sonst würde ja keiner VB benutzen.
KN4CK3R meinte, den timer (sieh Bild) da rein ziehen und dort alles Einstellen.
Only registered and activated users can see links.
Danach kommt man dann in die TickFunction die in unserem Fall die Schleife ist, dort schreibt man die Funtion mit Hotkeyabfrage. WO man dann den 2ten Timer aktiviert.
If(Hotkey=down)
Timer2->Enabled=true
Man muss halt dann selbst schaun wie es bei VB aussieht.
Timer
icon #9

Join Date: Aug 2009

Posts: 21

Also Ich hab das es jetzt mal so gemacht, kommt auch kein Fehler aber geht leider immer noch nich.

CPP Code:
  1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  2.  
  3. Dim m As Message
  4. 'die messages auswerten
  5. If m.Msg = WM_HOTKEY Then
  6. 'hier wird entschieden welcher hotkey es war
  7. 'einfach die übergebene id auswerten
  8. Select Case m.WParam
  9. Case 1
  10. SendKeys.SendWait(TextBox6.Text)
  11. System.Threading.Thread.Sleep(200)
  12. SendKeys.Send(TextBox1.Text)
  13. SendKeys.Send(Label13.Text)
  14.  
  15.  
  16. End Select
  17. End If
  18. MyBase.WndProc(m)
  19. End Sub
icon #10

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
kann ja auch nicht. Du versuchst eine Message auszuwerten, die sich nie verändert.

greetz KN4CK3R

__________________

Hallo
icon #11

Join Date: Aug 2009

Posts: 21

wie soll ich es dann machen? wenn ich nur den Case 1 block in den Timer mache kommen fehler!

icon #12

Join Date: Aug 2008

Posts: 2594

User-Rating:

17 positive
5 negative
Dann machst du halt was falsch. Auf deine stelle würde ich in einen dafür vorgesehedem Forum nachfragen. Wie du siehst können wir hier kein VB, und ich persöhnlich hab jetzt keine Lust die ganzen Funtionen zu lernen um zu sagen was du falsch machst.
http://lmgtfy.com/?q=Visual+Basic+forum