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

  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. vue.js加入购物车小球动画

    生成一个动画小球的div,并且生成五个小球,五个是为了生成一定数量的小球来作为操作使用,按照小球动画的速度,一般来说五个也可以保证有足够的小球数量来运行动画 动画的内容分别是外层和内层,外层控制动画小 ...

  2. js 模拟百度关键字搜索与跳转

    测试效果: css样式: ul{ display:none; } html代码: <input type="text" id="text" /> & ...

  3. bootstrap table 解析写死的json.并且把进度条放进列中。

    function showPhaseInfo(phase){ //json字符串转json对象 var phaseInfo = eval(phase); $('#phaseTable').bootst ...

  4. 关于最新版AFNetworking(3.0)上传多张图片的问题

    最新版的AF已经废弃了很多以前的类,所以很多以前的方法都不能用了,当然最主要还是为了适应ipV6所做的更改.楼主最近正在写多张图片上传,碰到了一些问题,解决之后直接封装了一个方法,废话有点多了,上代码 ...

  5. keil之编辑环境配置

    1.edit-->configuration 2. 3.开始是:ANSI编码,但一去掉:display modules,中文的注视就乱码了:请教Justchen,把编码改为GB2312,一切恢复 ...

  6. Asset Catalogs

    原文见这里. Asset Catalogs用于简化管理程序内用到的图片.每个asset catalog可以包含image set, App Icon, Launch Image和OS X Icon(如 ...

  7. you don't have permission to access ...........on this server问题解决

    因为刚刚开始使用新架构的项目,于是把老项目统统替换成了新的项目.配置好后,本地登录页面报 you don't have permission to access ...... on this serv ...

  8. Tomcat问题之 启动 Cannot find /usr/local/tomcat/bin/setclasspath.sh

    在linux启动startup命令报Cannot find /usr/local/tomcat/bin/setclasspath.sh  使用: unset CATALINA_HOME命令得以解决   ...

  9. jQuery表单验证的几种方法

    1.jQuery的框架的验证:validate框架 Jquery Validate 验证规则 (1)required:true 必输字段(2)remote:”check.PHP” 使用ajax方法调用 ...

  10. go加密算法:非对称加密(三)--Elliptic

    看了2星期的区块链原理与运行机制,加密这里开始变得有些生疏,花了一天时间复习了一些;看到了之前忽略的,也学会了椭圆曲线加密. //基础板:浅显易懂package main import ( " ...