?
Solved

Visual Basic Timer Control

Posted on 2011-04-25
2
Medium Priority
?
311 Views
Last Modified: 2012-05-11
Could someone help me change this to use timers instead of the current way it's setup to call back upon itself. Or is the loop function good enought to do without it getting stuck in a loop?

Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports System.Drawing
Imports System
Imports System.Threading
Imports System.Diagnostics
Public Class Form1

    Private slowmode As Boolean = False
    Dim MyProcess As Process
    'Load Ccleaner
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        MoveMouseTo(Panel1.PointToScreen(New Point(895, 288)))
        Delay(1)
        Clicked.LeftDown()
        Delay(0.5)
        Clicked.LeftUp()
        Delay(1)

        Do While True
            Dim HandleColor As String = "#31AB4E"

            Dim pt As New Point(Panel1.PointToScreen(New Point(136, 174)))
            Dim clr As Color = System.Drawing.ColorTranslator.FromHtml(HandleColor)

            Delay(1)
            If IsColorAt(pt, clr) = True Then
                Label3.Text = "Scan Complete"
            Else
                Label3.Text = "System Scanning"
            End If
        Loop

    End Sub
    'Grab the window to panel1
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim FHandle As IntPtr
        FHandle = FindWindow("msseces_class", Nothing)
        SetParent(FHandle, Panel1.Handle)

    End Sub

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, _
                                          ByVal lParam As IntPtr) As IntPtr
    End Function

    <System.Runtime.InteropServices.DllImport("USER32.DLL", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
    Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Public Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
    End Function

    Private Sub MoveMouseTo(ByVal targetPT As Point)
        Dim startPT As Point = Cursor.Position
        Dim distance As Single = PointToPointDist(startPT.X, startPT.Y, targetPT.X, targetPT.Y)
        Dim duration As Single = distance / 400 * 1000
        Dim startDT As DateTime = DateTime.Now
        Dim targetDT As DateTime = DateTime.Now.AddMilliseconds(duration)
        Dim percent As Single
        While DateTime.Now <= targetDT
            percent = DateTime.Now.Subtract(startDT).TotalMilliseconds / duration
            Cursor.Position = New Point(startPT.X + (targetPT.X - startPT.X) * percent, startPT.Y + (targetPT.Y - startPT.Y) * percent)
            System.Threading.Thread.Sleep(50)
            Application.DoEvents()
        End While
        Cursor.Position = targetPT
    End Sub

    Private Function PointToPointDist(ByVal Ax As Single, ByVal Ay As Single, ByVal Bx As Single, ByVal By As Single) As Single
        ' PointToPointDist = SquareRoot((Bx - Ax)^2 + (By - Ay)^2)
        Return Math.Sqrt((Bx - Ax) * (Bx - Ax) + (By - Ay) * (By - Ay))
    End Function

    Private Sub Delay(ByVal DelayInSeconds As Integer)
        Dim targetDT As DateTime = DateTime.Now.Add(TimeSpan.FromSeconds(DelayInSeconds))
        While targetDT > DateTime.Now
            System.Threading.Thread.Sleep(50) ' <-- very SMALL delay
            Application.DoEvents() ' <-- keep UI responsive
        End While
    End Sub

    Private Function IsColorAt(ByVal pt As Point, ByVal clr As Color) As Boolean
        Dim bmp As New Bitmap(1, 1)
        Using G As Graphics = Graphics.FromImage(bmp)
            G.CopyFromScreen(pt, New Point(0, 0), bmp.Size)
        End Using
        Return bmp.GetPixel(0, 0).Equals(clr)
    End Function

    Public Class Clicked
        Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
        Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down 
        Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up 
        Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down 
        Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up 

        Public Shared Sub LeftDown()
            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        End Sub

        Public Shared Sub LeftUp()
            mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
        End Sub

        Public Shared Sub RightDown()
            mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
        End Sub

        Public Shared Sub RightUp()
            mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
        End Sub
    End Class

End Class

Open in new window

0
Comment
Question by:Jack_Jones
2 Comments
 
LVL 83

Accepted Solution

by:
CodeCruiser earned 2000 total points
ID: 35460912
You can change this

            If IsColorAt(pt, clr) = True Then
                Label3.Text = "Scan Complete"
            Else
                Label3.Text = "System Scanning"
            End If

to



            If IsColorAt(pt, clr) = True Then
                Label3.Text = "Scan Complete"
                Exit While
            Else
                Label3.Text = "System Scanning"
            End If
0
 
LVL 1

Author Closing Comment

by:Jack_Jones
ID: 35461007
Worked great, the smallest changes help so much sometimes.


If IsColorAt(pt, clr) = True Then
             Label3.Text = "Scan Complete"
             Exit While
      Else
             Label3.Text = "System Scanning"
End If
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I think the Typed DataTable and Typed DataSet are very good options when working with data, but I don't like auto-generated code. First, I create an Abstract Class for my DataTables Common Code.  This class Inherits from DataTable. Also, it can …
Introduction When many people think of the WebBrowser (http://msdn.microsoft.com/en-us/library/2te2y1x6%28v=VS.85%29.aspx) control, they immediately think of a control which allows the viewing and navigation of web pages. While this is true, it's a…
This Micro Tutorial will teach you how to add a cinematic look to any film or video out there. There are very few simple steps that you will follow to do so. This will be demonstrated using Adobe Premiere Pro CS6.
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
Suggested Courses
Course of the Month9 days, 22 hours left to enroll

569 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question