AutoHotkey在锁屏下执行的临时解决方案

众所周知,微信对各类机器人是查的很严的,自从ChatGPT出现之后,微信机器人项目层出不穷,微信的封堵也日趋严厉,基本上已经很难找到一个稳定的解决办法。

但有时候,作为自动化流程的一部分,我们可能只需要在特定的群或聊天对象中发送一些特定的文字,其实不需要用到微信机器人那么复杂的方案。基于模拟键鼠操作的AutoHotkey也许就能解决问题了。

AutoHotkey本身使用上可以参考在线的详细文档,需要特别注意的是,v1和v2是不兼容的。

但是,AutoHotkey有一个局限性:它只能对“活动”的登录有效。如果当前用户按下Win+L锁屏,那么一切与GUI相关的互动将全部失效,当然也就不可能操作微信。实际上,Winodws锁屏之后,它的“活动”桌面就不复存在了,取而代之的是一个“伪桌面”,所有的程序窗口也同时不存在了,那当然也就不可能通过模拟鼠标、键盘操作来和它们进行交互了。

这从Windows的安全角度是可以理解的。

为了避免AutoHotkey的失效,我们可以干脆不锁屏。如果一切运行在虚拟机中,这样做问题不大,因为宿主机可以锁屏,虚拟机保持活动就好了。但如果还需要对虚拟机远程桌面呢?这就麻烦了:一旦远程桌面断开,远程服务器将“自动”锁定。远程桌面程序没有给我们留下一个“断开并保持服务器端活动”的选项。这就丧失了灵活性——锁定远程服务器变成了不可逆的操作,那么AutoHotkey岂不是也没办法发挥了?

幸好还有tscon。

tscon.exe是Windows自带程序,因为其功能十分偏门,以至于甚少有人提到它。它的作用是“断开远程桌面,并把活动桌面传递到本地”:刚刚好满足了我们的需求。

在本地编辑tscon.bat:

START C:\Windows\System32\tscon.exe 0 /dest:console
START C:\Windows\System32\tscon.exe 1 /dest:console
START C:\Windows\System32\tscon.exe 2 /dest:console
START C:\Windows\System32\tscon.exe 2 /dest:console
START C:\Windows\System32\tscon.exe 3 /dest:console
START C:\Windows\System32\tscon.exe 4 /dest:console
START C:\Windows\System32\tscon.exe 5 /dest:console

这里为了避免去search远程桌面的进程号,直接粗暴地写了6个,足以覆盖日常场景。

为tscon.bat创建快捷方式,并设置其为“以管理员模式运行”。

好了,今后远程桌面之后,点击tscon.bat的快捷方式,将会断开远程桌面,同时如果你的人在服务器面前,你会发现,原先锁定的服务器竟然直接解锁了——“用户的活动登录转移到了本地的当前状态”。

于是AutoHotkey可以正常运作了。