获取与设置光标在屏幕上的位置 

  GetCursorPos 获取光标在屏幕上的位置,光标位置始终是在屏幕坐标纵指定的,并且不受包含光标的窗口映射模式的影响

    函数原型:

      BOOL GetCursorPos(LPPOINT lpPoint);

    参数说明:

      lpPoint:类型LPPOINT,输出参数;一个指向光标在屏幕坐标点的结构指针

    返回值:

      BOOL类型,调用成功返回非0,失败返回0;

  SetCursorPos 设置光标在屏幕上的位置,如果新的坐标不是由最新的ClipCursor函数调用设置的屏幕矩形中,系统自动调整坐标以便光标停留在该矩形内

    函数原型:

      BOOL SetCursorPos(int X,int Y);

    参数说明:

      X:类型int,输入参数;设置光标在屏幕坐标中的x坐标

      Y:类型int,输入参数;设置光标在屏幕坐标中的y坐标

    返回值:

      BOOL类型,调用成功返回非0,失败返回0;

  C#代码调用案例

    /// <summary>
/// 光标的坐标
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct LPPOINT
{
public int X;
public int Y;
}
         //获取光标位置
[DllImport("user32.dll", EntryPoint = "GetCursorPos")]
unsafe public static extern bool GetCursorPos(LPPOINT* lpPoint);
//设置光标位置
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
public static extern bool SetCursorPos(int X, int Y); unsafe static void Main(string[] args)
{
int x = , y = ;
for (int i = ; i < ; i++)
{
SetCursorPos(x + i, y + i);
LPPOINT lpPoint;
GetCursorPos(&lpPoint);
Console.WriteLine("[x:{0},y:{1}]", lpPoint.X, lpPoint.Y);
Thread.Sleep();
}
Console.ReadKey();
}

获取当前光标句柄

  GetCursor 获取当前光标的句柄

    函数原型:

       HCURSOR WINAPI GetCursor(void);

    参数说明:

      无参

    返回值:

      返回当前光标的句柄,如果没有返回NULL

  C#代码调用案例

         [DllImport("user32.dll", EntryPoint = "GetCursor")]
public static extern IntPtr GetCursor(); unsafe static void Main(string[] args)
{
Console.WriteLine(GetCursor());
Console.ReadKey();
}

获取全局光标信息

  GetCursorInfo 获取全局光标的信息

    函数原型:

      BOOL GetCursorInfo(PCURSORINFO pci);

    参数说明:

      pci:PCURSORINFO类型,输入输出参数;一个指向PCURSORINFO的结构体的指针,函数调用前必须设置参数结构体cSize成员的值为sizeof(CURSORINFO)

    返回值:

      BOOL类型,调用成功返回非0,失败返回0;

  C#代码调用案例

     public struct CURSORINFO
{
public int cbSize;//结构体的大小,可通过sizeof(CURSORINFO)获取赋值
public int flags; //值为0光标隐藏;值为0x00000001光标显示;值为0x00000002禁用光标,该标志显示系统未绘制光标,用户通过触控输入而不是鼠标
public IntPtr hCursor;//光标句柄
public LPPOINT ptScreenPos;//光标在屏幕上的坐标
} class Program
{
[DllImport("user32.dll", EntryPoint = "GetCursorInfo")]
unsafe public static extern bool GetCursorInfo(CURSORINFO* pci); unsafe static void Main(string[] args)
{
CURSORINFO pci;
pci.cbSize = sizeof(CURSORINFO);
GetCursorInfo(&pci);
Console.WriteLine("cbSize:{0},flags:{1},hCursor:{2},[X:{3},Y:{4}]",
pci.cbSize, pci.flags, pci.hCursor, pci.ptScreenPos.X, pci.ptScreenPos.Y);
Console.ReadKey();
}
}

限定光标位置

  ClipCursor 将光标限定在举行区域内

    函数原型:

      BOOL WINAPI ClipCursor(const RECT * lpRect);

    参数说明:

      lpRect:RECT类型,输入参数;一个包含左上角和右下角的屏幕坐标结构指针,如果设置为NULL,则光标可以任意移动到屏幕上的任何位置

    返回值:

      BOOL类型,调用成功返回非0,失败返回0;

  C#代码调用案例

     public struct RECT
{
public int left;//矩形的左上角的x坐标
public int top;//矩形的左上角的y坐标
public int right;//矩形的右下角的x坐标
public int bottom;//矩形的右下角坐标
} class Program
{
[DllImport("user32.dll", EntryPoint = "ClipCursor")]
unsafe public static extern IntPtr ClipCursor(RECT* lpRect); unsafe static void Main(string[] args)
{
RECT rect;
rect.left = ;
rect.top = ;
rect.right = ;
rect.bottom = ;
ClipCursor(&rect);
Console.ReadKey();
}
}

Header---Winuser.h

Library---user32.dll

参考资源:https://msdn.microsoft.com/zh-cn/vstudio/ms646970%28v=vs.90%29

使用案例:https://msdn.microsoft.com/zh-cn/vstudio/ms648380%28v=vs.90%29#_win32_Creating_a_Cursor

P/Invoke 光标的操作的更多相关文章

  1. 转载:C# this.invoke()作用 多线程操作UI 理解二

    Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); //测试的窗体 public class ...

  2. C# this.invoke()作用 多线程操作UI

    Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); //测试的窗体 public class ...

  3. js 光标选中 操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. js光标定位操作

    1. 自动选中区域内容 <html> <meta http-equiv="Content-Type" content="text/html; chars ...

  5. C#多线程操作界面控件的解决方案(转)

    C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...

  6. 使用ide编程时候 不知为何突然光标变宽,如何恢复成原有的细竖光标

    各位朋友们, 你们在编程时候有没有这样的情况: 码着码着,突然不知什么原因,光标变成这样了: 这种宽的光标,不知道怎么调都调不回去,而且网上也没有类似的问题描述 就对我们编程极其不便(因为这种光标是操 ...

  7. Capslock+ 键盘党都爱的高效利器 - 让 Windows 快捷键操作更加灵活强大

    Capslock+ 键盘党都爱的高效利器 - 让 Windows 快捷键操作更加灵活强大  优化辅助    Windows   2016-06-05 91,167   微博微信QQ空间印象有道邮件   ...

  8. day8 文件操作

    文件基本操作 # 打开文件 f = open("小重山","r",encoding="utf-8") # readline 方法 只查看一行 ...

  9. python文件读取操作、序列化

    1.对文件进行读写操作时,先建立文件句柄 f = open("test.txt","r",encoding="UTF-8") 其中,r为文件 ...

随机推荐

  1. 2019.1.2 Spring管理事务的方式

    Spring管理事务的方式 1.编码式 1.将核心事务管理器配置到Spring容器 2.配置TransactionTemplate模版 3.将事务模版注入service 4.在Service中调用模版 ...

  2. Selenium应用代码(登录)

    这篇可以不看,主要是为了以后的应用代码(传参)做铺垫. import java.awt.Rectangle; import java.awt.image.BufferedImage;import ja ...

  3. mybatis会对多参数方法进行特殊处理

    例如:查询id=1,name=tom的一条数据 查询接口: User getUserByIdAndName(Integer id,String name); // <?xml version=& ...

  4. fullCalendar日程管理

    //日程安排 function timeTable(id){ var inner = "<div id='calendar'></div>"; $(&quo ...

  5. Git如何从github上pull别人的项目

    1:使用git方式导入项目 菜单-File->import->Git->Projects from Git 2:选择某个服务器上的资源 3:选择需要pull的地址 后面需要自己加上 ...

  6. [置顶] Android 高级开发 源码 UI 缓存 网络

    1.Android 源码剖析 性能优化  开源代码 2.Android UI效果源码 3.http://mzh3344258.blog.51cto.com/1823534/d-3 4.微信公众平台开发 ...

  7. 微信小程序跳H5页面

    主页面:index.wxml 主页面:index.js ↑跳转到另一个wxml页面→recharge.wxml recharge.wxml web-view中设置跳转h5的链接,可以加上需要的参数: ...

  8. Java使用正则解决问题

    分析以下需求,并用代码实现 (根据描述写匹配手机号和邮箱的正则表达式) 1.根据描述写出正则表达式 (1)手机号正则: 第一位为1 第二位为3或4或5或7或8 第三~十一位为0~9的其中一个数字 (2 ...

  9. git日常基本用法

    git作为项目管理现在已经是越来越广泛应用,结合自己平时的一些基本操作加上git说明文档里面的一些补充,我总结了一下git的基本用法: mkdir project # 创建项目目录 cd projec ...

  10. 关于MySQL优化问题

    众所周知在数据量庞大的情况下普通的SQL语句已经满足不了我们的需要了,这个时候就需要DBA去进行数据库的优化,而我们作为一名开发人员不能对数据库进行优化这时该怎么办呢?答案是只能在SQL语句上面进行优 ...