获取与设置光标在屏幕上的位置
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();
}
}