使用mouse_event时屏幕绝对坐标如何计算

 使用mouse_event时屏幕绝对坐标如何计算

[DllImport("user32",   EntryPoint="mouse_event")]  
  public   static   extern   void   mouse_event   (  
                  int   dwFlags,  
                  int   dx,  
                  int   dy,  
                  int   cButtons,  
                  int   dwExtraInfo  
  );  
MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。  
  MOOSEEVENTFMOVE:表明发生移动。  
  M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。  
  M00SEEVENTF_LEFTUP:表明松开鼠标左键。  
  MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。  
  MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。  
  MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。  
  MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。  
  MOOSEEVENTF_WHEEL:在Windows   NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。  
  dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。  
  dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。  
  dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离 用户 的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。  
          如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。  
  dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo来获得此附加信息。

看完帮助还是不知道怎么计算dx和dy,下面给出C++的代码以供参考:
    cursor.X = static_cast<unsigned short>( position.point.x * 65535 / pimpl->desktopSize.width  ); 
    cursor.Y = static_cast<unsigned short>( position.point.y * 65535 / pimpl->desktopSize.height );

`mouse_event` 是 Windows API 中的一个函数,可以用于模拟鼠标操作,例如鼠标移动、点击等。 函数声明如下: ```c++ VOID mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, ULONG_PTR dwExtraInfo ); ``` 其中,各参数的含义如下: - `dwFlags`:鼠标操作标识,可以是以下常量之一: - `MOUSEEVENTF_ABSOLUTE`:使用绝对坐标进行操作 - `MOUSEEVENTF_LEFTDOWN`:按下鼠标左键 - `MOUSEEVENTF_LEFTUP`:释放鼠标左键 - `MOUSEEVENTF_MIDDLEDOWN`:按下鼠标中键 - `MOUSEEVENTF_MIDDLEUP`:释放鼠标中键 - `MOUSEEVENTF_RIGHTDOWN`:按下鼠标右键 - `MOUSEEVENTF_RIGHTUP`:释放鼠标右键 - `MOUSEEVENTF_MOVE`:移动鼠标 - `MOUSEEVENTF_WHEEL`:滚动鼠标滚轮 - `MOUSEEVENTF_XDOWN`:按下鼠标 X 按钮 - `MOUSEEVENTF_XUP`:释放鼠标 X 按钮 - `dx`:鼠标操作的水平坐标,如果 `dwFlags` 设置了 `MOUSEEVENTF_ABSOLUTE` 标识,则该参数指定屏幕上的绝对坐标,否则指定相对坐标。 - `dy`:鼠标操作的垂直坐标,含义同 `dx`。 - `dwData`:鼠标操作附加数据,例如滚动鼠标滚轮的滚轮值。 - `dwExtraInfo`:额外信息,一般情况下可以设置为 0。 下面是一个示例,模拟鼠标点击: ```c++ // 从屏幕左上角移动鼠标到 (100,100) 位置,然后按下并释放鼠标左键 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 100 * 65535 / GetSystemMetrics(SM_CXSCREEN), 100 * 65535 / GetSystemMetrics(SM_CYSCREEN), 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); ``` 需要注意的是,`MOUSEEVENTF_ABSOLUTE` 标识下的坐标值需要进行转换,上述代码中使用了 `GetSystemMetrics` 函数获取屏幕宽高来进行转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值