cql

导航

使用AutoHotkey在Connectify无设备连接时自动远程关机

Connectify是一款很好用的的软件,可以把笔记本模拟成一台无线路由器,这样我的手机就可以使用它建立的wifi共享上网了。但是对于喜欢晚上睡前玩一会儿手机的人有这么个问题,就是睡前需要起床去把电脑关机,在严冬季节这样的缺陷就更让人无法忍受了。当然也可以采用定时关机的方法,但总是不太灵活自由。

我在网上搜搜了一下,有利用QQ来实现远程关机的,觉得不太方便,还有可以通过远程Web关机的Switch Off,但我使用没有成功。最后还是自己用AutoHotkey实现了,程序在检测到没有设备接入Connectify后自动关机或休眠。

首先下载安装AutoHotkey(选择Unicode版本),运行里面的AutoIt3 Window Spy,点击Connectify的窗口后观察

用Window Spy观察Connectify窗口

注意左右红框里的内容,可以利用这个信息来判断Connectify是否有设备接入。图中是无设备时的情况,我用手机连接wifi后会变成(1 Client),因此可以通过判断AutoHotkey捕捉的窗口文本中是否存在(0 Clients)来实现自动远程关机

最初的程序是直接执行关机的,为防止误判,后改为倒计时关机。因为有的电源方案在电脑长时间没有用户输入时会进入待机状态,造成共享网络中断,所以使用了SetThreadExecutionState来阻止电脑待机。第一行加入了关闭显示器节能。

代码:

SendMessage, 0x112, 0xF170, 2,, Program Manager  ; 0x112 为 WM_SYSCOMMAND, 0xF170 为 SC_MONITORPOWER.
; 对上面命令的注释: 使用 -1 代替 2 来打开显示器.
; 使用 1 代替 2 来激活显示器的节能模式.
; 此命令用以关闭显示器显示

while 1
{
    IfWinExist, ,(0 Clients)
        break   ;检测到无设备接入则退出此循环执行后面的关机程序
    DllCall("Kernel32\SetThreadExecutionState", "int", 1)   ;重置系统空闲计时器,阻止系统进入待机
    Sleep, 5000     ;5000ms检测一次connectify设备接入情况
}

TimeRemaining = 10      ;等待10s后关机,在此期间可以取消关机,防止误判
Gui, Add, Text, vTxt, 系统将在%TimeRemaining%秒后关机   ;提示文本
Gui, Add, Button, default gButtonOK, 立即执行 ;按下此按钮后执行ButtonOK:后的代码 default表示回车默认按此按钮
Gui, Add, Button, x+10 gButtonCancel, 取消  ;在上一控件右侧即“立即执行”右侧增添“取消”按钮
SetTimer, UpdateTime, 1000  ;创建用于更新关机剩余时间的定时器
Gui, Show   ;显示界面
return

UpdateTime: ;1s执行一次
TimeRemaining := TimeRemaining-1
GuiControl, ,Txt, 系统将在%TimeRemaining%秒后关机
if(TimeRemaining == 0)  ;时间到,执行关机
{
    SetTimer, ,Off
    Gui, Destroy
    DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)   ;休眠
    ExitApp
}
return
    
ButtonOK:
SetTimer, ,Off
Gui, Destroy
DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)   ;休眠
ExitApp

GuiClose:
ButtonCancel:
ExitApp
;Author http://cql.cnblogs.com

我一般习惯用休眠,如果要用关机要将程序中的两处
DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)
改为
Shutdown, 9

使用:将代码复制在记事本中,保存为文件名后缀为ahk(如connectify.ahk)。运行前要先用设备连接connectify建立的wifi,点击托盘使桌面上显示connectify的窗口,然后双击connectify.ahk运行脚本(也可以设置成快捷键运行),之后当设备断开wifi连接后,ahk脚本就会自动让电脑休眠或关机了。

我的环境为:Windows 7 旗舰版 32位,AutoHotkey 1.1.09.00, Connectify Hotspot 3.7.1.25486

参考:

1.AutoHotkey 0级入门教程:让重复工作一键完成——善用佳软

2.Preventing Logoff or Suspend During a Burn (Windows)

3.关屏幕的代码——AutoHotkey 中文论坛

posted on 2012-12-09 16:01  cql blog  阅读(991)  评论(0编辑  收藏  举报