所以我把这一切都放在一个每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有时会保持循环
答案 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