La logica di questo codice è corretta, infatti se inserisco delle pause (Threading.Thread.Sleep(Millisecondi)) il codice funziona perfettamente. Ho notato che questo codice funziona meglio su CPU più veloci, mentre sono costretto ad aumentare lo "Sleep" su CPU più lente (in questa parte di codice ho rimosso tutte le pause, ma fate finta che ce ne sia una subito dopo ogni chiamata ad una funzione esterna).

Un esempio è dato da questa funzione "RossoNero":


Private Sub RossoNero()

Dim lColor As Integer
Dim Limite As Integer = 1
Dim Vincita As Double = 0
Dim Raddoppi As Integer = 1
Dim Giri As Integer = 0

Do While (Vincita > -70 And Vincita < 100)
Raddoppia(Raddoppi, Giocata)
SpostaMouse("GiroVeloce")
Clicca()
AttendiFineGiocata()

If Giocata = 0 Then
lColor = GetPixel(GetDC(0), txtRossoX.Text, txtRossoY.Text)
If lColor.ToString <> clrR.Text.ToString Then
Resetta()
Vincita = Vincita + Soldi(Raddoppi)
Raddoppi = 1
Else
Vincita = Vincita - Soldi(Raddoppi)
Raddoppi = Raddoppi + 1
End If
Else
lColor = GetPixel(GetDC(0), txtNeroX.Text, txtNeroY.Text)
If lColor.ToString <> clrN.Text.ToString Then
Resetta()
Vincita = Vincita + Soldi(Raddoppi)
Raddoppi = 1
Else
Vincita = Vincita - Soldi(Raddoppi)
Raddoppi = Raddoppi + 1
End If
End If

CambiaGiocata()

If Raddoppi > 9 Then
SpostaMouse("X")
Clicca()
Exit Sub
End If

Giri = Giri + 1
Loop

End Sub

**************************
Le funzioni che chiama sono queste:

Private Sub SpostaMouse(ByVal Locazione As String)

Select Case Locazione
Case "GiroVeloce"
SetCursorPos(txtGiroVeloceX.Text, txtGiroVeloceY.Text)
Case "Annulla"
SetCursorPos(txtAnnullaX.Text, txtAnnullaY.Text)
Case "X"
SetCursorPos(txtXX.Text, txtXY.Text)
Case "Rosso"
SetCursorPos(txtRossoX.Text, txtRossoY.Text)
Case "Nero"
SetCursorPos(txtNeroX.Text, txtNeroY.Text)

... Altro codice simile ...

End Select

End Sub

***********

Private Sub Clicca()

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 1)
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 1)

End Sub

***********

Private Sub AttendiFineGiocata()

Dim lColor As Integer = GetPixel(GetDC(0), txtENDX.Text, txtENDY.Text)
Do While lColor.ToString = clrE.Text
lColor = GetPixel(GetDC(0), txtENDX.Text, txtENDY.Text)
Loop

End Sub

***********

Private Sub Resetta()

Cicli = 1
SpostaMouse("Annulla")
Attendi(200)
Clicca()

End Sub

***********

Private Sub CambiaGiocata()

If Giocata = 0 Then
Giocata = 1
Else
Giocata = 0
End If

End Sub

***********

Private Sub Raddoppia(ByVal Raddoppi As Integer, ByVal Colore As Integer)

Dim X As Integer = 0
If Giocata = 0 Then
SpostaMouse("Rosso")
Else
SpostaMouse("Nero")
End If
Select Case Raddoppi
Case 1
Clicca()
Case 2
Clicca()
Clicca()
Case 3

... Codice simile ...

Case 6
For X = 1 To 2
Clicca()
Next
SpostaMouse("Fish3")
Clicca()
If Colore = 0 Then
SpostaMouse("Rosso")
Else
SpostaMouse("Nero")
End If
For X = 1 To 3
Clicca()
Next
SpostaMouse("Fish1")
Clicca()

End Select

End Sub