我想模擬鼠標點擊一個窗口。目前,我有成功這樣做如下(我使用Python,但它應該適用於一般的win32):win32:模擬點擊而不模擬鼠標移動?
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
這工作得很好。但是,如果在我手動移動鼠標時發生點擊,光標位置將被丟棄。有沒有辦法直接發送點擊給定的(x,y)
座標,而不用將鼠標移動到那裏?我已經試過類似沒有太大的運氣如下:
nx = x*65535/win32api.GetSystemMetrics(0)
ny = y*65535/win32api.GetSystemMetrics(1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | \
win32con.MOUSEEVENTF_ABSOLUTE,nx,ny)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | \
win32con.MOUSEEVENTF_ABSOLUTE,nx,ny)
我擁有的座標是絕對座標,但不是相對於窗口位置的座標。PostMessage會將它們作爲絕對座標或相對於窗口的座標發送出去?我實際上已經可以獲得hwnd了,但只是將我的座標轉換爲'(x - left,y - top)',我從'GetWindowRect'得到'left'和'top'沒有在正確的位置點擊。 – Claudiu 2010-09-15 19:39:11
啊,真的。您需要將絕對點擊位置轉換爲相對位置。在PostMessage之前使用ScreenToClient(hWnd,lpPoint) – Andrew 2010-09-15 20:26:40
啊,我會試試!在這種情況下postmessage和sendmessage之間是否有差異? – Claudiu 2010-09-15 22:41:18