c#使用win32api实现获取光标位置

 更新时间:2016年02月16日 09:49:24   投稿:hebedich  
本文给大家汇总了2个使用C#实现获取光标位置的代码,非常的简单实用,第二种方法更为全面,推荐给大家。

方法一:需要调用win32api,winform、wpf通用

[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);
 
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
  public int X;
  public int Y;
  public POINT(int x, int y)
  {
    this.X = x;
    this.Y = y;
  }
}

方法二:通过调用Win32 API设置鼠标位置,实现移到指定位置,模仿并实现鼠标点击动作,并回到鼠标原先位置的方法,代码如下:

//获取屏幕
      int width = (int)SystemParameters.PrimaryScreenWidth;//得到屏幕整体宽度
      int height = (int)SystemParameters.PrimaryScreenHeight;//得到屏幕整体高度
//获取鼠标初始位置,相对屏幕的绝对位置
      System.Drawing.Point p = new System.Drawing.Point();

      ApiHelper.GetCursorPos(out p);
      if (width != 0) p.X = 65535 * p.X / width;
      if (height != 0) p.Y = 65535 * p.Y / height;
//设置移动的位置坐标
      int dy = 100;
      int dx = 100;
      dx = (int)(dx * 65535 / width);
      dy = (int)(dy * 65535 / height);
           
//移到指定位置 

ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_MOVE | MouseEventFlag.MOUSEEVENTF_ABSOLUTE), dx, dy, 0, IntPtr.Zero);//移动到需要点击的位置
    
//完成一次点击
ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_LEFTDOWN), 0, 0, 0, IntPtr.Zero);
ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_LEFTUP), 0, 0, 0, IntPtr.Zero);//
//单击可以写为
ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_LEFTDOWN | MouseEventFlag.MOUSEEVENTF_LEFTUP), 0, 0, 0, IntPtr.Zero);
//双击则再重复单击方法
 
//回到初始位置
 ApiHelper.mouse_event((int)(MouseEventFlag.MOUSEEVENTF_MOVE | MouseEventFlag.MOUSEEVENTF_ABSOLUTE), p.X, p.Y, 0, IntPtr.Zero);//移动到需要点击的位置

代码中ApiHelper为作者封装的Win32 API方法,读者可以通过api精灵等软件查询api函数,自行实现封装。

相关文章

  • c#执行excel宏模版的方法

    c#执行excel宏模版的方法

    这篇文章主要介绍了c#执行excel宏模版的方法,导出Excel模版的代码如下,大家参考使用吧
    2014-01-01
  • C#中枚举类型和radiobox关联操作的方法

    C#中枚举类型和radiobox关联操作的方法

    这篇文章主要介绍了C#中枚举类型和radiobox关联操作的方法,实例分析了C#中枚举类型及与控件关联操作的相关技巧,需要的朋友可以参考下
    2015-04-04
  • unity实现UI元素跟随3D物体

    unity实现UI元素跟随3D物体

    这篇文章主要为大家详细介绍了unity实现UI元素跟随3D物体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 基于C#实现微信支付宝扫码支付功能

    基于C#实现微信支付宝扫码支付功能

    为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能。需要的朋友跟随小编一起看看吧
    2019-06-06
  • C#实现鼠标消息捕获

    C#实现鼠标消息捕获

    这篇文章介绍了C#实现鼠标消息捕获的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论

    C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论

    在本篇文章里小编给大家整理的是关于C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论,有需要的朋友们学习下。
    2019-11-11
  • 利用C#实现获取当前设备硬件信息

    利用C#实现获取当前设备硬件信息

    这篇文章主要为大家详细介绍了如何利用C#实现获取当前设备硬件信息的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-03-03
  • C# 获取当前总毫秒数的实例讲解

    C# 获取当前总毫秒数的实例讲解

    这篇文章主要介绍了C# 获取当前总毫秒数的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C#使用Selenium的实现代码

    C#使用Selenium的实现代码

    这篇文章主要介绍了C#使用Selenium的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Silverlight文件上传下载实现方法(下载保存)

    Silverlight文件上传下载实现方法(下载保存)

    这篇文章主要介绍了Silverlight文件上传下载实现方法(下载保存) ,需要的朋友可以参考下
    2015-11-11

最新评论