Ho bisogno di simulare dei click in determinate posizioni ogni tot secondi, essendo questi click ripetitivi avevo pensato quindi ad un ciclo. Inoltre pensavo per dargli una pausa temporale tra un click e l'altro di utilizzare i thread in questo modo:
Praticamente il tutto cicla (alla pressione del button1) finchè a > 1 e con il button2_click simulo un tasto termina per stoppare il ciclo. Il problema è che con i thread.sleep "mi mette tutto in sleep" e quindi non è visualizzato il tasto per terminare tutto.codice:Public Class x3 'variabile per il ciclo di funzionamento Dim a As Integer 'Funzione per simulare il click del mouse in determinate coordinate Enum meFlags As Integer MOUSEEVENTF_MOVE = &H1 MOUSEEVENTF_LEFTDOWN = &H2 MOUSEEVENTF_LEFTUP = &H4 MOUSEEVENTF_RIGHTDOWN = &H8 MOUSEEVENTF_RIGHTUP = &H10 MOUSEEVENTF_MIDDLEDOWN = &H20 MOUSEEVENTF_MIDDLEUP = &H40 MOUSEEVENTF_XDOWN = &H80 MOUSEEVENTF_XUP = &H100 MOUSEEVENTF_WHEEL = &H800 MOUSEEVENTF_VIRTUALDESK = &H4000 MOUSEEVENTF_ABSOLUTE = &H8000 End Enum Declare Sub mouse_event Lib "user32" (ByVal dwFlags As meFlags, ByVal Coords As Drawing.Point, ByVal dwData As Integer, ByVal dwExtraInfo As UIntPtr) Sub SimulateClick(ByVal Location As Drawing.Point) Dim trect As Drawing.Rectangle = Screen.GetBounds(Location) Dim tpnt As New Drawing.Point(65535.0 / trect.Width * Location.X, 65535.0 / trect.Height * Location.Y) mouse_event(meFlags.MOUSEEVENTF_MOVE Or meFlags.MOUSEEVENTF_ABSOLUTE, tpnt, 0, New UIntPtr(Convert.ToUInt32(0))) mouse_event(meFlags.MOUSEEVENTF_LEFTDOWN Or meFlags.MOUSEEVENTF_ABSOLUTE, tpnt, 0, New UIntPtr(Convert.ToUInt32(0))) mouse_event(meFlags.MOUSEEVENTF_LEFTUP Or meFlags.MOUSEEVENTF_ABSOLUTE, tpnt, 0, New UIntPtr(Convert.ToUInt32(0))) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pnt As New Point(x1.Text, y1.Text) Dim pnt2 As New Point(x1.Text + 50, y1.Text + 20) a = 2 While (a > 1) Threading.Thread.Sleep(5000) SimulateClick(pnt) Threading.Thread.Sleep(5000) SimulateClick(pnt2) Threading.Thread.Sleep(5000) End While End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = 1 End Sub End Class
Come posso fare a risolvere questo problema? posso utilizzare qualche altra funzione per simulare il tempo di attesa? per altro esiste un modo di conversione preciso del tempo dello sleep? cioè quei 5000 non mi sembrano 5 secondi!
Sarebbe anche più ottimale se potessi simulare qualcosa del tipo "alle 8:30" esegui questo click.
Vi ringrazio in anticipo per la vostra disponibilità,
Neptune.


Rispondi quotando