提起程序设计,大家都会想到AS P.Net,Java,JsP,Visual CH,Delphi等“大块头”开发工具。的确,这些专业开发工具功能强大,能够开发出复杂的程序。但是要想深入掌握这些专业开发工具,并灵活的设计专业的程序可不是一件轻松的事情。
俗话说,尺有所短,寸有所长,对于初学者来说,如果想快速设计简单实用的程序,又不想大费周章的学习专业开发工具,那么AutoHotKey这款小巧的开发工具就是您不错的选择。同大型开发工具相比,AutoHotKey区区几兆的体积显得“娇小玲珑”,不过其强悍的程序设计功能让人不能小觑。AutoHotKey简单易学,尤其对于系统编程最为实用,您只需记事本就可以快速开发出专业实用的程序来。其很大的优点是实现编译操作,让程序可以独立运行,用来开发绿色软件是在合适不过了。接下来,就让危险漫步通过实例让大家领略AutoHotKey的魅力。
一,编写脚本
我们这里开发有趣的系统锁定程序,同一般的锁屏程序不同,其具有两个特点,其一是界面新颖,可以产生透明变色锁定效果。其二是解锁方式特殊,采用的是多键位同时点击的解锁方式,其优点是您可以任意组合字母键,数字键,鼠标键,以及各种控制键,让别人无从破解。使用AutoHotKey,我们只需编辑区区几行程序,就可以实现上述复杂的功能。打开Windows资源管理器,任选一个文件夹,在空白处点击右键,在弹出菜单中依次选择菜单“新建”一“AutoHotkey Script”,在当前路径下新建一个AutoHotKey脚本文件,将其改为合适的名字(例如“LockPC.ahk”)。在该文件的右键菜单中选中“Edit Script”。
二.程序原理介绍
之后保存该“LockPC.ahk”文件即可,为了便于分析程序,在所有的代码行底部都添加注释语句,在AutoHotKey中,使用分号来标识注释语句。该程序的运行原理非常简单,首先创建一个和桌面大小相同的,没有边框和标题栏的窗口,并且可以设置本程序窗口的透明度。之后将本程序窗口设置为最顶端,覆盖在所有桌面窗口之上。这样让桌面是透明的,实际上本程序已经取得了系统的控制权。之后激活两个定时器程序,其中名称为“Check”的定时器作用是不间断检测是否按下预设键位,如果按下的话,可以为系统解锁。“Color”定时器的作用是每隔500毫秒将窗口的颜色随机设置,产生透明变色的锁定效果。为了防止别人使用各种控制键键退出本程序,还对各种系统控制按键进行了屏蔽。
三,程序的编译运行
在该“LockPC.ahk”文件的右键菜单上点击“Compile Script”项,执行该脚本的编译操作,之后在同一路径下生成“LockPC.exe”文件。该程序可以独立运行。当运行该程序后,系统立即被锁定,同时产生让Windows产生透明变色的效果,只有按下预设组合键位,本例为同时按下“c”,“x”,“1”键(您可以任意修改按键组合),才可以为系统解锁。本程序可以屏蔽常用的控制键,防止别人非法解锁。为了防止别人重新开机,最好将程序放置到系统启动项中,让系统启动后自动锁定。
四,关键程序行分析
在以上程序中已经添加了比较详细的注释,理解起来很容易,下面只对关键的程序行进行单独讲解。
在第3行中的“A_ScreenHeight”关键字代表屏幕的高度【但不包括任务栏),将其加上10来设置本程序窗口高度,这样可以让本窗口完成覆盖整个屏幕。
从第4行到第7行用来设置本程序窗口的特征,包括取消系统菜单,设置本程序字体为12,在本程序左上角添加提示信息,以及显示本程序窗口等。
其中使用到了“GUI”函数,该函数是AutoHotKey的关键函数之一,功能很复杂,带有很多参数,这里仅仅使用了其一些常用参数。例如“Gui-SysMenu”语句表示禁用系统菜单,其中的“一”号表示禁用某项功能。
“Gui Font, s12”语句作用是设置本窗口字体大小,在“s”字符后面跟随字体的大小,这里为12。“GuiAdd,Text,cFFFFFF x15 y15,系统已经被锁定,请输入正确密码解锁”语句的作用是在本窗口预设位置显示提示文本信息。其中的“Add”参数表示添加对象,“Text”参数表示添加的对象为文本,“cFFFFFF”表示文本颜色,其中的“c”符号后面跟随具体的颜色值。“x”,“y”参数后面跟随文本显示的坐标点。 “Gui Show, w%A_ScreenWidth%h%Height%,Lock3d”语句的用来显示本程序,其中的“Show”参数表示让本程序窗口真正显示,“w”,“h”参数用来指明本程序窗口的宽度和高度,“A ScreenWidth”关键字代表屏幕宽度,其前后两个“%”表示该关键字的数值。“Lock3D”表示本窗口的标题名。第8行“WinSet Transparem,,100,Lock3d”语句的作用是设置本程序窗口的透明度,“WinSet”函数可以设置指定窗口的各项参数,“Transparent”参数用来设置目标窗口的透明度,其后面跟随透明度参数,范围从1到255,依次实现从完全透明到完全不透明,您可以需要进行设置,本例设置为100,产生半透明效果,最后一个参数是目标窗日的名称,这里的“Lock3d”就是本程序窗口标题名。第9行“WinSet AlwaysOnTop,On,Lock3d”语句的作用是将本窗口置顶显示, “AlwaysOnTop”参数表示执行置顶操作, “On”参数表示激活窗口置顶功能,最后面跟随目标窗口标题名。第10和第11行设置了两个定时器,其中的“SetTimer”函数用来设置定时器,后跟定时器的名称和间隔的时间。
第13行到第15行表示“Color”定时器的代码,其中的“Check:”表示该定时器的运行起点,注意其后面必须跟随“:”符号,当遇到Return关键宇或者下一个定时器标签后表示本定时器代码结束。
语句“Random Rand,-99999,9999999”的作用是从-99999到99999中随机取数,其中的“Random”函数用来产生随机数,“Rand”参数保存取得的随机数,“-99999,9999999”表示随机数取值范围。语句“Gui Cojor, o/oRand%”的作用是将取得的随机数设置本程序窗口的颜色,因为该定时器每隔500毫秒运行一次因此会产生窗口变色的动态效果。第17行“Check:”语匀设置“Check”定时器标签,其中的“if (GetKeyStareilc””&&(GetKeyState(”x”))&&‘(GetKeyState(r Jl-语句用来判断是否同时按下预设按键,这里为同时按下CXL键。其中的GetKevStaiet按键名称用来取得目标键是否处于按下状态,如果按下就返回。True”,否则为“False”。当然,这里只是简单举例,您可以任意设置自己所需的按键组合,AutoHotKey支持的键位列表可以参见帮助文档,例如“if (GetKeyState(”c”))&& (GetKeyState(”x”))&&(GetKeyState(“RButton”))&& (GetKeyState(”LButton”))”语句可以判断是否按下“c”,“x”,鼠标左键和鼠标右键。if (GetKeyState(”c”))&&(GetKeyState(”x”))&&(GetKeyState(”Enter”))&&(GetKeyState(”Backspace”))”语句可以判断是否按下“c”,“x”,回车和退格键。因为键盘上的按键众多,可以产生成百上千的键位组合,想破解几乎不可能。
第19行“goto GuiClose”跳转到“GuiClose”标签处,用来关闭本锁定程序。第20行到25行用来检测桌面是否激活,如果激活的话,就将其隐藏,防止别人随意解锁。其中的“IfWinExist”函数用来检测目标窗口是否存在,“ahk_class #32770”用来设定窗口类名,其中的“#32770”表示桌面窗口句柄。“WinHide”函数用来隐藏桌面。当桌面隐藏后,将变量Z的值设置为1。从27行到44行用来屏蔽常用的控制键(例如“CtrI+Alt+Delete”,“Alt+Tab”等),防止别人非法结束本锁定程序。这里列举了很多常用控制键,注意其中的“”符号,该符合和目标热键组合使用,表示通配键位,例如“*TAB::”就表示所有和“TAB”关联使用的按键组合,例如“Alt+TAB”,“Ctrl+Alt+Tab”等等,这样可以产生批量控制按键的作用。当然,这里只是列举了常用的屏蔽键,您可以将所有需要屏蔽的按键添加进来,具体的键位名称可以参见AutoHotKey版主文档。实际上,这里的程序已经可以屏蔽激活所有的控制键。注意在热键的后面必须跟随“::”符号,表示当该键按下后,执行的处理语句。这里没有任何语句,只包含“Return”关键字,表示当按下以上控制键时,不执行任何操作,从而实现屏蔽按键的效果。第46到49行表示推出代码,当按下预设键位后,执行该处的语句,“ifZ=l”语句表示桌面是否隐藏,如果隐藏的话,使用“WinShow ahk_class #32770”语句激活桌面,“WinShow”函数表汞显示目标窗口。最后使用“Exitapp”结束本程序,完成解锁。
本文来源:危险漫步博客