当前位置: 首页 > news >正文

鼠标闲置一段时间后自动隐藏

该问题来自论坛提问,两个api函数
GetLastInputInfo:获取闲置时间
ShowCursor:设置鼠标状态,这里要注意,本函数并不能直接影响鼠标状态,而是设置状态计数器,参数为True时计数器+1,反之-1,只有当计数器大于等于0时鼠标为显示,小于0时鼠标隐藏。所以可能会发生某次调用该函数而没有生效的情况。为了避免这个问题,可以用wile循环判断结果。

  1. using System;
  2. using System.Windows.Forms;
  3. using System.Runtime.InteropServices;
  4. namespace WindowsApplication5
  5. {
  6. public partial class Form1:Form
  7. {
  8. ///<summary>
  9. ///获取鼠标闲置时间
  10. ///</summary>
  11. [StructLayout(LayoutKind.Sequential)]
  12. public struct LASTINPUTINFO
  13. {
  14. [MarshalAs(UnmanagedType.U4)]
  15. public int cbSize;
  16. [MarshalAs(UnmanagedType.U4)]
  17. public uint dwTime;
  18. }
  19. ///<summary>
  20. ///获取鼠标闲置时间
  21. ///</summary>
  22. ///<paramname="plii"></param>
  23. ///<returns></returns>
  24. [DllImport( "user32.dll" )]
  25. public static extern bool GetLastInputInfo( ref LASTINPUTINFOplii);
  26. ///<summary>
  27. ///设置鼠标状态的计数器(非状态)
  28. ///</summary>
  29. ///<paramname="bShow">状态</param>
  30. ///<returns>状态技术</returns>
  31. [DllImport( "user32.dll" ,EntryPoint= "ShowCursor" ,CharSet=CharSet.Auto)]
  32. public static extern int ShowCursor( bool bShow);
  33. public Form1()
  34. {
  35. InitializeComponent();
  36. //定时期
  37. System.Windows.Forms.Timertimer= new Timer();
  38. timer.Enabled= true ;
  39. timer.Interval=100;
  40. timer.Tick+= new EventHandler(timer_Tick);
  41. }
  42. //鼠标状态计数器
  43. int iCount=0;
  44. void timer_Tick( object sender,EventArgse)
  45. {
  46. //鼠标状态计数器>=0的情况下鼠标可见,<0不可见,并不是直接受api函数影响而改变
  47. long i=getIdleTick();
  48. if (i>5000)
  49. {
  50. while (iCount>=0)
  51. {
  52. iCount=ShowCursor( false );
  53. }
  54. }
  55. else
  56. {
  57. while (iCount<0)
  58. {
  59. iCount=ShowCursor( true );
  60. }
  61. }
  62. }
  63. ///<summary>
  64. ///获取闲置时间
  65. ///</summary>
  66. ///<returns></returns>
  67. public long getIdleTick()
  68. {
  69. LASTINPUTINFOvLastInputInfo= new LASTINPUTINFO();
  70. vLastInputInfo.cbSize=Marshal.SizeOf(vLastInputInfo);
  71. if (!GetLastInputInfo( ref vLastInputInfo)) return 0;
  72. return Environment.TickCount-( long )vLastInputInfo.dwTime;
  73. }
  74. }
  75. }



相关文章:

  • html购物倒计时,基于javascript实现的购物商城商品倒计时实例
  • LWUIT + ChartComponent 之一实现饼图(PieChart)
  • win10n网页如何保存为html,win10浏览器如何保存网页_win10浏览器怎么保存网页
  • 牛人(笑来)VS牛人(阿朱):惺惺相惜 - [读书,这么好的事儿]
  • 2021年湖南高考音体美成绩查询方式,2021年湖南高考成绩什么时候出来 公布时间...
  • itmo大学计算机专业,【俄罗斯圣光机大学访学】计算机学院ITMO交流访学团
  • LWUIT + ChartComponent 之二实现线形图(LineChart)
  • qt怎么添加html样式,Qt中插入html样式
  • LWUIT + ChartComponent 之三实现柱体图(HBarChar)
  • 辽宁省交通高等专科学校云计算机,辽宁省交通高等专科学校教务管理系统入口http://202.199.184.12/jwc/...
  • 诫子书
  • 怎么用计算机删除历史记录,win7计算机里搜索历史记录怎么删除
  • 谷歌跌出08年美国最值得信赖20大公司排行榜
  • 计算机课翻译成英语怎么说,计算机专业课程名英文翻译.doc
  • html文件怎么迭代,迭代多个文件并使用Beautiful Soup从HTML附加文本
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • android 一些 utils
  • Apache Spark Streaming 使用实例
  • ES6之路之模块详解
  • gf框架之分页模块(五) - 自定义分页
  • GitUp, 你不可错过的秀外慧中的git工具
  • react 代码优化(一) ——事件处理
  • socket.io+express实现聊天室的思考(三)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Twitter赢在开放,三年创造奇迹
  • webpack4 一点通
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 给第三方使用接口的 URL 签名实现
  • 今年的LC3大会没了?
  • 面试遇到的一些题
  • 如何利用MongoDB打造TOP榜小程序
  • 智能网联汽车信息安全
  • 自定义函数
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (0)Nginx 功能特性
  • (04)odoo视图操作
  • (52)只出现一次的数字III
  • (转载)利用webkit抓取动态网页和链接
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net Web窗口页属性
  • .net 反编译_.net反编译的相关问题
  • .net 提取注释生成API文档 帮助文档
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET轻量级ORM组件Dapper葵花宝典
  • /*在DataTable中更新、删除数据*/
  • ??myeclipse+tomcat