如何监控你的鼠标

如何监控你的鼠标

你想知道你每天的鼠标左键和右键的点击次数吗?你想知道你的鼠标手是怎么养成的吗?源于上面的两个想法,就开发了MouseMonitor这款应用。它是用来记录每天工作的时候鼠标左键和鼠标右键的点击次数。这是款很小的软件,源代码也已经开源了。欢迎到

http://mousemonitor.funaio.com/ 

下载使用。

MouseMonitor v1.0.1首页:

功能:

1 可以最小化到托盘。这样在工作的时候可不影响用户的使用。

2 可以进行一周的左右键点击次数的统计。这样可以对比看出每周的鼠标点击趋势。

3 有升级提醒。当版本升级的话,会进行版本升级提醒。

mouseMonitor实现细节

源代码已经开源:

https://github.com/jianfengye/MouseMonitor

在具体实现过程中主要用到了几个技术:1 C#中如何使用Windows Hook

在windows的事件中加入一个钩子,当鼠标左键或者右键有动作的时候,触发钩子做一些对应的操作。

关于windows Hook的具体使用,之前有一篇文章介绍了Hook接口:

http://www.cnblogs.com/yjf512/archive/2013/05/13/3075179.html

也可以直接看mouseMonitor的例子:

https://github.com/jianfengye/MouseMonitor/blob/master/code/MouseMonitor/WinApi.cs

2 必须要多线程操作

这个程序需要将每天的鼠标点击记录进行持久化。我这里持久化选择的是保存在本地文件(%Appdata%/mouseMonitor/log.xml)。但是由于windows钩子是触发在实际的事件之前的,所以在钩子中做写文件操作是不妥当的,会直接影响用户的使用性能,用户会感受的明显的鼠标点击受影响。所以我这边是另外单独启动一个线程,来异步做写文件操作(现在是每20秒进行一次写操作)。

 

但是这里有个问题,如何在页面上让用户感知出来这个软件是有效的?这里就需要在页面上有个计数器。这个计数器当然是保存在内存中的,所以每次钩子触发的时候,软件就只要将这个计数器计数自增,这样不会对用户的实际使用不会有任何影响。然后再由异步线程来每20秒进行一次持久化操作。

3 统计如何显示

我这里的统计图表选择使用form内嵌html页面的方式。即在windows form中开一个webbrowser框,然后对mouseMonitor.funaio.com/show/static这个页面进行POST操作,并且这个POST操作是带附件的。然后在webbrowser中显示出页面展现出来的统计图表。

这个统计页面的服务端是使用php+nginx, 页面使用的是open-flash-chart这个swf来渲染的。

关于open-flash-chart的使用可以参考这里:

http://www.cnblogs.com/yjf512/archive/2012/02/17/2355163.html

http://www.cnblogs.com/yjf512/archive/2012/02/14/2351716.html

 

这里我要吐槽下,之前是想要使用bootstrap的Chart.js(http://www.bootcss.com/p/chart.js/)来做的。

但是这里的Chart.js使用到了canvas标签,而.net 4.0的windows Form使用的浏览器内核大概等同于IE8。所以是不支持html5的canvas的(我即使加上了一些辅助的js也是没有用)。所以说html5的路还有很长啊...

4 保存的log文件放在哪里

原先是想当然的放在了exe所在的同级目录。后来当打包的时候发现一个问题。一般安装包安装的默认路径是C:Programe FilemouseMonitor 下,而对于系统盘一般程序是没有写权限的,除非你使用管理员账号运行程序。这个对用户体验又是个打击。后来才知道,要写入的数据最好放在%Appdata% 目录下。这个目录是允许一般的用户进行写入操作的。

如何获取%Appdata%:

?System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)5 如何在webBrowser控件中带入附件?

这个其实是HTTP POST的问题,需要拼对body和header,照搬过网上的例子,发现有的是不行的。需要进行修改,后来就开个fiddler一点点抓包调试,现在这个函数是可以直接使用的了。

对应的代码可以看这个文件:

https://github.com/jianfengye/MouseMonitor/blob/master/code/MouseMonitor/ShowForm.cs

6 一些代码的问题:1 如何将Directory结构xml序列化?

另外创建了SerializableDictionary 的类,需要继承Dictionary, IXmlSerializable

具体代码:

https://github.com/jianfengye/MouseMonitor/blob/master/code/MouseMonitor/SerializableDictionary.cs

2 应用升级如何通知用户?

服务器开发一个升级接口,服务器返回最新版本号,和代码中写死的版本号比对。

3 子线程如何暂停和恢复?

thread.Suspend()

thread.Resume()

后记

本来的想法是做个小玩意自己使用。后来发现如果以产品的视角来做的话,技术核心功能完成之后,其他周边的非核心功能或许需要的时间


比丘资源网 » 如何监控你的鼠标

发表回复

提供最优质的资源集合

立即查看 了解详情