需求:朋友的朋友在政府部门工作,他们的考勤办法为,每天早晨上班开机,系统会自动弹框,点击确定,算是上班报到;下班时候,点击桌面图标,点击确定,算是下班报到。此人听闻有工具可以实现此功能,可以每天迟到早退了,就找到我的朋友。
朋友和这人有利益往来,也算是所谓的“权利寻租”,遂联系我给其写此软件。
环境:Windows XP SP3
实现功能:实现上班、下班的自动报到;
首先做需求分解,因为是朋友的活,就大概分析了下,主要实现如下功能:
1. 定时开机;
2. 开机自动登录系统;
3. 工具开机启动;
4. 桌面找到上班提示框,并点掉;
5. 定时点击桌面图标,并点击,做下班报到;
6. 关机;
分拆了上述需求之后,就开始做实现,其实很多功能都是可利用系统实现的,相比于自我实现的工具,如果系统已实现,我认为尽量使用系统实现,稳定可靠,比如:
1. 定时开机的配置:开机进入BIOS –>找到电源管理页签(POWER MANAGEMENT FEATURES),里面有RESUME ON
RTC ALARM,,配置为ENABLE—>配置定时开机的日期和时间(这里的日期配置居然有“+、-”号调整,恼~),点击F10保存配置退出;
当然,针对不同类型的BIOS,配置方式可能稍有偏差,但大概如此;
2. 开机自动登录系统的配置:主要是系统启动到进程启动之间要有一个用户登录的过程,配置成管理员帐户自动登录,可以让程序自动Run起:
单击“开始/运行”,输入“rundll32 netplwiz.dll,UsersRunDll”,--回车---弹出“用 户帐户”窗口,--取消选定“要使用本机,用户必须输入用户名和密码”选项---确定,在弹出 的对话框中输入你想让电脑每次自动登录的账户和密码即可。如果你没设置密码则不用输入密码,直接确定。
3. 针对第6点的关机,可以直接运行系统命令:shutdown –s –t 10,意味着十秒之后系统自动关机,如果强力点还可以配上参数–f;
4. 程序的自动运行,开始的时候本身是想写个windows服务,配置其模式为auto,也就是开机自动启动,后来想了想麻烦,依然直接使用windows的计划任务;这个顺便说下,windows下的计划任务和Linux下的cron都非常好用的,远比自己轮询等待好点;
好的,经过上面的系统实现功能的分析,基本上这个小工具需要自我实现的内容就非常少了:
1. 找到上班提示框,并点掉;
2. 桌面上定时点击图标,并点击,做下班报到;
这两步基本就可以归结到Windows应用程序自动化的范畴了,理论上说,对于Windows API的熟悉可以让这步工作成为可能;
这里只列出使用到的函数吧(python):
寻找桌面图标:
Win32gui.FindWindowsEx()
点击:
Win32api.mouse_event()
至于自动点击桌面图标是组里其他人实现的,我用的现成函数,不方便公开人家的工作成果了。
功能完成之后,用py2exe打包成autoClick.exe
最好,因为毕竟不是个“好的程序”,大大的CMD框在任务栏会让人起疑,用了个小技巧,用VBS调起程序,使其在后台运行,在任务管理器中可见即可:
Set
bjShell = CreateObject("Wscript.Shell")
objShell.Run("autoClick.exe"),
0, TRUE '此时你的记事本就在后台打开了可在任务管理器中看到