发布: 更新时间:2024-10-23 09:49:43
本文将介绍如何在Windows系统中操作光标。通常情况下,我们只能在当前窗体或控件范围内设置/隐藏光标,无法全局操作Windows系统的光标。但当我们接到需要隐藏Windows全局鼠标光标的需求时,以下将详细介绍如何操作。
在开始具体操作前,先了解系统鼠标光标。在鼠标属性-自定义列表中可以看到一共有13种类型,对应13种工作状态。对应的Windows.Input.CursorType枚举为:
操作系统提供了一组预定义的光标,如箭头、手形、沙漏等,位于 C:\Windows\Cursors目录下。
在光标显示逻辑方面:
对于当前鼠标状态的获取需求,可以通过GetCursorInfo获取当前鼠标光标id以及句柄。
需要隐藏系统光标时,可以通过创建一个空白光标来实现。可以按照以下链接中的步骤制作blank.cur文件,并使用该文件隐藏系统光标:
自己动手制作 Windows 鼠标光标文件(.cur格式)
恢复系统光标的显示,只需将之前的光标Handle设置回去即可。
以上是实现了当前光标的替换。然而,上文介绍了Windows系统中有13种光标状态,会根据应用程序状态进行切换,因此我们还需要处理其他光标状态。
针对13种光标都替换为空白光标,13种光标CursorId值在setSystemCursor文档有说明。
在运行验证过程中,我们可以在系统桌面、应用窗体(如VisualStudio)以及网页等光标编辑状态下成功隐藏光标。
还原光标状态时,我们需要用到User32及参数类。
需要注意的是,系统光标修改需要谨慎处理,光标一旦修改后,人工操作不太容易恢复。因此,在应用程序退出、崩溃等情况下,需要做好光标恢复操作。
以上demo代码见:
HideSystemCursorDemo on GitHub
参考资料:
AllAPI.net - Your #1 source for using API-functions in Visual Basic!
createCursor function (winuser.h) - Win32 apps | Microsoft Learn
SetSystemCursor function (winuser.h) - Win32 apps | Microsoft Learn
关键字:自定义光标、隐藏/显示光标、Windows系统光标显示