2014-02-18 48 views
0

我希望通過單擊left_mouse的2 times.Between 2點擊時間處理動作雙擊,我睡100ms的如何正確處理雙擊?

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

它的工作原理確定在我的電腦,但不能正常工作在虛擬機 可能是,有一個延遲時間,當機器做功能「SendInput」

Eventhough我刪除「睡眠(100)」,它只需點擊2次,並不會像我想要的那樣「雙擊」。

如何處理雙擊正是在這種情況下

請建議我也會這麼做吧

感謝,

+0

重複:http://stackoverflow.com/questions/5789843/how-i-can-simulate-a-double-mouse-click-on-window-i-khow-handle-on-xy-coord –

+0

你應該提供代碼。 – manuell

回答

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由您決定。