Win32的:模拟仿真无鼠标移动点击? [英] win32: simulate a click without simulating mouse movement?

查看:391
本文介绍了Win32的:模拟仿真无鼠标移动点击?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图模拟一个窗口上点击鼠标。目前,我有成功这样做如下(我使用Python,但它应该适用于一般的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)
纽约= 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)


解决方案

尝试WindowFromPoint()函数:

 点PT;
    pt.x = 30; //这是你的点击坐标
    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的);

I'm trying to simulate a mouse click on a window. I currently have success doing this as follows (I'm using Python, but it should apply to general win32):

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

This works fine. However, if the click happens while I'm moving the mouse manually, the cursor position gets thrown off. Is there any way to send a click directly to a given (x,y) coordinate without moving the mouse there? I've tried something like the following with not much luck:

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)

解决方案

Try WindowFromPoint() function:

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);

这篇关于Win32的:模拟仿真无鼠标移动点击?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆