2010-09-15 29 views
11

Bir pencerede bir klik taklit çalışıyorum. Şu anda başarıyı şöyle Bunu yaparken sahip (Python kullanıyorum, ancak genel win32 için geçerli olmalıdır): Bu iyi çalışırwin32: fare hareketi simüle etmeden bir tıklama simüle?

win32api.SetCursorPos((x,y)) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) 

. Ancak, fareyi manuel olarak hareket ettirirken tıklama olursa, imleç konumu atılır. Fareyi hareket ettirmeden, belirli bir (x,y) koordinatına doğrudan tıklama göndermek için herhangi bir yol var mı? Ben pek şans ile aşağıdaki gibi bir şey denedim:

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) 

cevap

7

WindowFromPoint() işlevini deneyin: Bu soruya cevap vermez

POINT pt; 
    pt.x = 30; // This is your click coordinates 
    pt.y = 30; 

HWND hWnd = WindowFromPoint(pt); 
LPARAM lParam = MAKELPARAM(pt.x, pt.y); 
PostMessage(hWnd, WM_RBUTTONDOWN, MK_RBUTTON, lParam); 
PostMessage(hWnd, WM_RBUTTONUP, MK_RBUTTON, lParam); 
+1

koordinatları .. PostMessage mutlak olanlar veya pencereye göreli olanlar olarak iletecektir? Aslında zaten hwnd alabilir, ama sadece 'benim Coords tercüme ben' left' ve gelen 'top' var (x - - sol y üst)', 'GetWindowRect' doğru yerde tıklayın vermedi. – Claudiu

+0

Ah, gerçekten. Mutlak tıklama konumunu ilgili göreceli olarak dönüştürmeniz gerekir. Kullanım ScreenToClient (hWnd, lpPoint) PostMessage – Andrew

+0

ah ty önce, ben buna çalışacağım! Bu durumda postmessage ve sendmessage arasında herhangi bir fark var mı? – Claudiu

3

, ama benim sorunu çözmek kapsamaz:

win32api.ClipCursor((x-1,y-1,x+1,y+1)) 
win32api.SetCursorPos((x,y)) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN| \ 
        win32con.MOUSEEVENTF_ABSOLUTE,0,0) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP| \ 
        win32con.MOUSEEVENTF_ABSOLUTE,0,0) 
win32api.ClipCursor((0,0,0,0)) 

sonuç Yaptığım herhangi hareketler tıklama engel olmaz olmasıdır. Olumsuz olan, benim gerçek hareketimin berbat olacağıdır, bu yüzden hala önerilere açığım. Ben mutlak koordinatlar olsa da, pencere konumuna göre koordinatları değildir var

İlgili konular