Jack_Jones
asked on
Visual Basic Hotkey
When running the program I want to be able to press Alt+P to pause it and then Alt+P again to start it. Can someone help me impliment this into the following code.
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
When the program has the focus or even if it hasn't?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks again Idle that example worked perfectly.