Как точно обрабатывать двойной щелчок?

Я хочу обработать двойной щелчок, щелкнув левой кнопкой мыши 2 раза. Между двумя щелчками я сплю 100 мс.

SendInput(LEFT_CLICK...);
Sleep(100);
SendInput(LEFT_CLICK...);

Это работает нормально на моем ПК, но не работает правильно на виртуальной машине. Может быть, есть задержка, когда машина выполняет функцию «SendInput»

Даже если я удаляю «Sleep(100)», это просто щелкает 2 раза и не «двойной щелчок», как я хочу.

Как обрабатывать двойной щелчок именно в этом случае

Пожалуйста, предложите мне сделать это в любом случае

Спасибо,


person quanrock    schedule 18.02.2014    source источник
comment
Дубликат: stackoverflow.com/questions/5789843/   -  person Jochen Kalmbach    schedule 18.02.2014
comment
Вы должны предоставить код.   -  person manuell    schedule 18.02.2014


Ответы (1)


Кстати, вы должны указать, в какой среде вы работаете, и сделать свой код немного более подробным. Использование SendInput — это один из вариантов, я не знаю, что именно вы пытаетесь сделать, но я дам вам еще два варианта для имитации кликов. Что-то вроде этого будет работать нормально (я кодирую на питоне, но это должна быть та же идея):

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)

Вы можете спать в течение 50 мс между time.sleep(0.05), но у меня это работает без него, и я тестировал его на виртуальной машине.

Другой вариант, если вы хотите выполнять тихие щелчки без необходимости перемещать курсор, вы можете отправить сообщение окну, в котором вы хотите щелкнуть, зная дескриптор окна (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 на ваше усмотрение.

person TheCodingGent    schedule 18.02.2014