栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

鼠标连点器(VB.net 全局键盘钩子+模拟鼠标 左键、右键)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

鼠标连点器(VB.net 全局键盘钩子+模拟鼠标 左键、右键)

相信大家在玩游戏的时候会把 “攻击” 设置为鼠标左键,但是自己手速不够快,被人家秒了

废话不多说,立马进入主题:

一、新建一个vb.net工程(窗体应用程序)

大概是这样,timer1控制鼠标左键,timer2控制鼠标右键

二、新建一个模块(Module1.vb)

写入:注意,本模块由CSDN用户VB.net提供的,引用一下vb.net 全局键盘钩子

'鼠标钩子
Imports System.Runtime.InteropServices
Module Module1
    
    Public Function SetWindowsHookEx(ByVal idHook As Integer, ByVal HookProc As KeyHook, ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
    End Function
    
    Public Function CallNextHookEx(ByVal idHook As Integer, ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer
    End Function
    
    Public Function UnhookWindowsHookEx(ByVal idHook As Integer) As Boolean
    End Function
    
    Public Function GetModuleHandle(ByVal name As String) As IntPtr
    End Function

    
    Public Structure KBDLLHOOKSTRUCT
        Public vkCode As Keys
        Public scanCode As Keys
        Public flags As Integer
        Public time As Integer
        Public dwExtraInfo As Integer
    End Structure
    Public Const HC_ACTION As Integer = 0

    Public Const WH_KEYBOARD_LL As Integer = 13

    Public Delegate Function KeyHook(ByVal Code As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer

    '
    Public callback As KeyHook
End Module

主窗体:

代码:

Imports System.Runtime.InteropServices
'Imports System.Threading
'鼠标连点class,钩子,模拟左键按下,右键按下
Public Class Form1
    'Dim start As Boolean
    Dim hooks As Boolean
    Dim state As String
    Dim i As Int32
    ' Dim flag As Boolean = False
    Declare Sub mouse_event Lib "user32" (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 '模拟鼠标左键按下
    Public Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键释放
    Public Const MOUSEEVENTF_RIGHTDOWN = &H8 '模拟鼠标右键按下
    Public Const MOUSEEVENTF_RIGHTUP = &H10 '模拟鼠标右键释放
    Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINTAPI) As Long '全屏坐标声明
    Private Declare Function ScreenToClient Lib "user32.dll" (ByVal hwnd As Int32, ByRef lpPoint As POINTAPI) As Int32 '窗口坐标声明
    Dim P As POINTAPI

    Private Structure POINTAPI '声明坐标变量
        Public x As Int32 '声明坐标变量为32位
        Public y As Int32 '声明坐标变量为32位
    End Structure
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If R1.Checked = True Then
            Timer1.Interval = TR.Text
            Timer1.Enabled = True
            R1.Enabled = False
            R2.Enabled = False
        End If
        If R2.Checked = True Then
            Timer2.Interval = TR.Text
            Timer2.Enabled = True
            R1.Enabled = False
            R2.Enabled = False
        End If
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Timer1.Enabled = False
        Timer2.Enabled = False
        R1.Enabled = True
        R2.Enabled = True
    End Sub

    'Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
    '    Select Case keyData
    '        Case Keys.F6
    '            Button1_Click(Nothing, Nothing)
    '            flag = True
    '            Return True
    '        Case Keys.F7
    '            Timer1.Enabled = False
    '        Case Else
    '            Return MyBase.ProcessCmdKey(msg, keyData)   '其他键按默认处理
    '    End Select
    'End Function

    Public KeyHandle As Integer
    Public Function KeyCallback(ByVal Code As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer
        If Code >= HC_ACTION Then
            Dim keyStruct As KBDLLHOOKSTRUCT
            keyStruct = CType(Marshal.PtrToStructure(lParam, GetType(KBDLLHOOKSTRUCT)), KBDLLHOOKSTRUCT)
            state &= keyStruct.vkCode.ToString & ControlChars.CrLf
            '这里是检测并屏蔽F6按键
            If keyStruct.vkCode = Keys.F6 Then 'Or keyStruct.vkCode = Keys.R F6
                Button1_Click(Nothing, Nothing)
                Return 1
            End If
            If keyStruct.vkCode = Keys.F7 Then 'Or keyStruct.vkCode = Keys.R F7
                Button2_Click(Nothing, Nothing)
                Return 1
            End If
        End If
        Return CallNextHookEx(KeyHandle, Code, wParam, lParam)
    End Function

    Public Sub HookKeyboard()
        callback = New KeyHook(AddressOf KeyCallback)
        Dim hins As IntPtr = IntPtr.Zero
        hins = GetModuleHandle(Process.GetCurrentProcess.MainModule.ModuleName)
        KeyHandle = SetWindowsHookEx(WH_KEYBOARD_LL, callback, hins, 0)
        'If (KeyHandle > 0) Then
        '    state &= "启动钩子" & ControlChars.CrLf
        'Else
        '    state &= "启动钩子失败:" & Err.LastDllError & ControlChars.CrLf
        'End If
    End Sub

    Public Sub UnhookKeyboard()
        Call UnhookWindowsHookEx(KeyHandle) '停止钩子
        'state &= "停止钩子" & ControlChars.CrLf
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        HookKeyboard()
        hooks = True
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        If TopMost = True Then
            TopMost = False
        ElseIf TopMost = False Then
            TopMost = True
        End If
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        If hooks = True Then
            Call UnhookWindowsHookEx(KeyHandle)
        ElseIf hooks = False Then
            Call HookKeyboard()
        End If
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        run1()
    End Sub
    Sub run1()
        GetCursorPos(P)
        mouse_event(MOUSEEVENTF_LEFTDOWN, P.x.ToString, P.y.ToString, 0, 0)
        mouse_event(MOUSEEVENTF_LEFTUP, P.x.ToString, P.y.ToString, 0, 0)
        i += 1
        Text = "鼠标连点--" & " 正在点击:" & i
    End Sub
    Sub run2()
        mouse_event(MOUSEEVENTF_RIGHTDOWN, P.x.ToString, P.y.ToString, 0, 0)
        mouse_event(MOUSEEVENTF_RIGHTUP, P.x.ToString, P.y.ToString, 0, 0)
        i += 1
        Text = "鼠标连点--" & " 正在点击:" & i
    End Sub

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        run2()
    End Sub
End Class

 测试:还不错,但唯一的缺点是timer无法精确到1ms,导致实际值比理论值相差大

链接:下载连点器  链接: https://pan.baidu.com/s/1ZSpsfYwtGLXSHdEEaiAk0Q?pwd=vrde 提取码: vrde 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023698.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号