• 使用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 中文论坛

  • 相关阅读:
    「JSOI2015」套娃
    「JSOI2015」非诚勿扰
    「JSOI2015」送礼物
    「JSOI2015」子集选取
    「JSOI2015」salesman
    「JSOI2015」字符串树
    [2]树的DFS序
    hdu 6058 Kanade's sum
    UVALive 6907 Body Building
    CF617/E XOR and Favorite Number
  • 原文地址:https://www.cnblogs.com/cql/p/2810137.html
Copyright © 2020-2023  润新知