如何完全处理双击?

时间:2014-02-18 07:17:50

标签: winapi click double sendinput

我想通过点击left_mouse 2次来处理动作双击。在2次点击时间之间,我睡了100ms

  

SendInput(LEFT_CLICK ...);
睡眠(100);
SendInput(LEFT_CLICK ...);

它在我的电脑上运行正常,但在虚拟机中无法正常工作 可能是,当机器执行“SendInput”功能时有一个延迟时间发生,尽管我删除了“Sleep(100)”,它只是点击了2次而没有“双击”我想要的

如何在这种情况下完全处理双击

无论如何,请建议我这样做

谢谢,

1 个答案:

答案 0 :(得分:1)

顺便说一下,您应该指定您正在使用的环境,并使您的代码更加详细。使用SendInput是一个选项,我不知道你想要做什么,但我会再给你两个选项来尝试模拟点击。像这样的东西可以正常工作(我在python中编码,但它应该是相同的想法):

def leftClick(x=0, y=0):
    win32api.SetCursorPos((x,y)) #set the cursor to where you wanna click
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0) #generate a mouse event
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)
    return True

def doubleClick(x=0, y=0):
    leftClick(x,y)
    leftClick(x,y)

你可以在time.sleep(0.05)之间睡50个小时,但是如果没有它你就能正常工作,我已经在vm中测试了。

另一个选项如果你想在不必移动光标的情况下执行无声点击,你可以向你想要点击的窗口发送一条消息,知道窗口句柄(hwnd),这里我假设你将句柄作为参数传递

def leftClick(x=0, y=0, hwnd):
   lParam = win32api.MAKELONG(x,y) # create a c long type to hold your click coordinates
   win32gui.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lparam) # send a message to the window that the mouse left button is down.
   win32gui.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, lparam) # send a message to the window that the mouse left button is up.
   return True

def doubleClick(x=0, y=0, hwnd):
   leftClick(x,y, hwnd)
   leftClick(x,y, hwnd)

或者您可以发送消息WM_LBUTTONDBLCLK给您。