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

  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();
}
}
05-12 00:29