问题描述
大家好.问个问题.我有很多个窗体,A(程序启动的时候启动的窗体),B,C.现在想要的功能就是在A,B,C窗体中没有任何鼠标和键盘操作的时间达到5分钟就返回到A窗体。如何实现?有没有统一处理的方法。我现在想到的就是每个窗体加一个Timer来判断。但是很多窗体每一个都这样写。太麻烦了吧。是不是有比较简单的方法?
解决方案
解决方案二:
在线等!
解决方案三:
1。捕获鼠标的坐标,以及键盘的响应。把坐标放到一个变量中。2。启动一个timer每秒检查一下变量中的坐标和现在鼠标的坐标是否一致,如果一致而且时间已到5分钟,那么就显示A窗体。此方法比较苯。不过可行。
解决方案四:
给个思路吧,这个我没试过重载A窗体的键盘事件OnKeyPress和鼠标OnMouseMove事件,设置一个全局变量,有任何鼠标键盘事件发生时复位,通过定时器判定这个变量的值,超过某一阀值的时候关闭A弹出的子窗体,这个思路也许会有问题,比如B的窗体在接收键盘事件后,该消息会不会到达A窗体,如果不能,还需要在B窗体进行重载,使得消息能到达A窗体。
解决方案五:
谢谢2楼和3楼的朋友。我使用了[StructLayout(LayoutKind.Sequential)]publicstructLASTINPUTINFO{[MarshalAs(UnmanagedType.U4)]publicintcbSize;[MarshalAs(UnmanagedType.U4)]publicuintdwTime;}[DllImport("user32.dll")]publicstaticexternboolGetLastInputInfo(refLASTINPUTINFOplii);publicstaticlongGetLastInputTime(){LASTINPUTINFOvLastInputInfo=newLASTINPUTINFO();vLastInputInfo.cbSize=Marshal.SizeOf(vLastInputInfo);if(!GetLastInputInfo(refvLastInputInfo))return0;returnEnvironment.TickCount-(long)vLastInputInfo.dwTime;}可以获取空闲时间。我的想法是能不能在A窗体启动的时候开启一个线程,然后这个线程就是监控空闲时间,并且如果时间达到了5分钟,那么我就返回A窗体。代码写的时候问题N多。呵呵。
解决方案六:
A、B、C窗体只能有一个窗体是在最前端的。写个类,让A、B、C都继承。不用分别起线程吧。
解决方案七:
嗯。我试试看,搞定结贴!没有多少分了。