不确定是什么导致了这一点

时间:2017-07-02 10:02:26

标签: vb.net

所以我把这一切都放在一个每80毫秒运行一次的计时器中,由于某种原因,当这个功能激活时,即使我没有按住左键,它仍会卡住并继续前进。我还尝试添加第二张支票(clickdone),但它仍然在做。在这里造成它的原因我认为是延迟,但我有点需要延迟,所以如果这里的任何人可以通过添加另一张支票或其他修复此问题来帮助我,我们将不胜感激!这是我的代码:

Sub MyDelay()
    Dim randomlul As New Random
    Dim ezdelay As Integer
    ezdelay = randomlul.Next(private delay, private delay)

    Dim iCount As Integer = 1
    For iCount = 1 To ezdelay
        iCount = iCount + 1
    Next
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If CheckBox2.Checked = True Then
        hotkey = GetAsyncKeyState(Keys.LButton)
        If CBool(hotkey) Then
            If (clickdone = True) Then
                mouse_event(mouse_downclick, 0, 0, 0, 0)
                clickdone = False
                MyDelay()
                clickdone = True
                mouse_event(mouse_upclick, 0, 0, 0, 0)
            End If
            End If
        End If
End Sub

这不是链接的帖子的重复,我尝试了其他解决方案,但它搞砸了我的其他功能所以现在我必须做一个计数延迟,这不会弄乱其他功能,但现在的问题是, getasynckeystate有时会保持循环

1 个答案:

答案 0 :(得分:0)

它被卡住的原因是因为GetAsyncKeyState()读取虚拟鼠标和键盘输入流,而不是物理键的状态。因此代码将继续执行,因为它注意到输入流中有更多的点击。

previous answer of mine中所述,您必须将鼠标点击作为窗口消息发送,因为它们不会被GetAsyncKeyState()注意到。

  

编辑(2017-07-31):
  我已弃用我的MouseInputHelper课程,并将其与常规InputHelper课程合并。请放心,功能仍然相同。

     

从我的GitHub存储库下载InputHelper
  https://github.com/Visual-Vincent/InputHelper/releases

您应该可以使用它:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If InputHelper.Keyboard.IsKeyDown(Keys.LButton) Then
        InputHelper.WindowMessages.SendMouseClick(Windows.Forms.MouseButtons.Left, Cursor.Position, True, True)

        'Do stuff here...

        InputHelper.WindowMessages.SendMouseClick(Windows.Forms.MouseButtons.Left, Cursor.Position, False, True)
    End If
End Sub