如何监控你的鼠标

简介:

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

http://mousemonitor.funaio.com/ 

下载使用。

MouseMonitor v1.0.1

首页:

Image

功能:

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

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

Image(1)

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 File\mouseMonitor\ 下,而对于系统盘一般程序是没有写权限的,除非你使用管理员账号运行程序。这个对用户体验又是个打击。后来才知道,要写入的数据最好放在%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<String, MouseState>, IXmlSerializable

具体代码:

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

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

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

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

thread.Suspend()

thread.Resume()

后记

本来的想法是做个小玩意自己使用。后来发现如果以产品的视角来做的话,技术核心功能完成之后,其他周边的非核心功能或许需要的时间更多。所以再感慨下,做一个给自己使用的应用和做一个想能给别人使用的应用是两个概念。

 

比如这个应用,实际上还是没有UI的,后续还可以做的事情可能有:

美化UI(外表啊外表。。。)

增加功能(当前只能记录鼠标左键和右键,或许还可以实现更炫的功能?)

应用统计(每天下载量多少?或许这个软件实际上不会有人用,但是数据还是需要后台统计才能知道)

软件自升级(现在只是有个升级提示,让用户去网站下载,这个用户体验还是很不好的。如果能用户同意升级后点击一个按钮就自动下载升级就好了)

是否可以发送统计图表到社交网站?(比如在统计页面上增加sina微博的分享按钮?)




本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2013/05/17/3083100.html,如需转载请自行联系原作者

相关文章
|
人工智能 自然语言处理 机器人
探索人工智能:使用Python构建一个简单的聊天机器人
探索人工智能:使用Python构建一个简单的聊天机器人
528 0
|
JavaScript
Element el-form 表单详解
本文目录 1. 前言 2. 基本用法 3. 行内表单 4. 标签对齐方式 5. 调整尺寸 6. 小结
2379 0
Element el-form 表单详解
|
网络协议 关系型数据库 MySQL
如何使用宝塔面板搭建MySQL数据库并实现无公网IP远程访问
如何使用宝塔面板搭建MySQL数据库并实现无公网IP远程访问
1754 3
|
网络协议 Shell 网络安全
开发工具使用之 github 私人仓库Clone 失败的问题
这篇文章介绍了解决GitHub上私人仓库克隆失败的问题,通过检查本地SSH key的存在与否、生成新的SSH key、添加SSH key到GitHub以及使用SSH方式克隆私有仓库的步骤来解决这个问题。
开发工具使用之 github 私人仓库Clone 失败的问题
|
机器学习/深度学习 人工智能 自然语言处理
乘法变加法!MIT清华校友全新方法优化Transformer:Addition is All You Need
【10月更文挑战第30天】MIT和清华校友合作提出了一种名为L-Mul的算法,通过将浮点数乘法转换为整数加法,优化了Transformer模型的能效。该方法在多个任务上取得了与传统方法相当甚至更好的性能,同时显著降低了计算资源和能耗。论文地址:https://arxiv.org/abs/2410.00907
287 1
|
小程序 前端开发 API
微信小程序全栈开发中的多端适配与响应式布局是一种高效的开发模式。
探讨小程序全栈开发中的多端适配与响应式布局,旨在实现统一的用户体验。多端适配包括平台和设备适配,确保小程序能在不同环境稳定运行。响应式布局利用媒体查询和弹性布局技术,使界面适应各种屏幕尺寸。实践中需考虑兼容性、性能优化及用户体验,借助跨平台框架如Taro或uni-app可简化开发流程,提升效率。
399 1
|
存储 自然语言处理 测试技术
Transformers 4.37 中文文档(八)(4)
Transformers 4.37 中文文档(八)
462 2
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | Neck | 在网络中替换c2f为融合蛇形卷积的C2f_DySnakeConv
本专栏介绍的DSCNet采用蛇形动态卷积,增强对细长弯曲结构(如血管)的特征提取。该卷积操作灵感来自蛇形曲线,能自适应调整权重以关注管状结构局部特征。通过动态卷积核,网络能更好地处理形状变异,提升目标检测的准确性和鲁棒性。
|
人工智能 大数据
零基础如何自学编程?这7个自学网站,建议收藏备用
零基础如何自学编程?这7个自学网站,建议收藏备用
1980 0
|
开发工具 git iOS开发
MacOS安装node,npm踩坑
MacOS安装node,npm踩坑
539 0
MacOS安装node,npm踩坑

热门文章

最新文章