编注:我们会不定期挑选 Matrix 的优质文章,展示来自用户的最真实的体验和观点。 文章代表作者个人观点,少数派仅对标题和排版略作修改。

打开网易新闻 查看精彩图片

不知道你是否经历过这样的场景,在使用翻页笔翻页你所要演讲的 PPT 时,电脑某个程序弹了一个窗口,导致 PPT 放映的窗口处于未活动的状态,翻页笔失灵,于是你不得不用鼠标点一下放映窗口;又或者当台上的演讲者拿着翻页笔演讲时,你需要对电脑做一些其他的操作,但是这样会影响台上的人翻页。

有的翻页笔装有驱动程序可以解决这个问题,但问题是这类的翻页笔都比较贵。而在现有硬件基础上,其实有软件解决方案——AutoHotkey。

▍AutoHotkey 如何解决问题?

AutoHotkey (AHK) 是一个免费开源的 Windows 脚本语言工具,主要用于自动化重复性任务、创建自定义快捷键(热键)、模拟鼠标键盘操作,并能处理窗口管理。

我让 AI 写了一个 AutoHotkey 的脚本,功能是捕获翻页笔对应的键盘按键,然后直接发送到相应的进程(PowerPoint 或者 WPS)中,从而能够在任何时候都能进行翻页,即使在放映窗口处于未活动的状态。

▍操作流程

1. 下载安装 AutoHotkey(只有Windows版本)。

链接:https://www.autohotkey.com/

2. 在电脑本地新建一个 demo.ahk(自行命名)文本文档,用记事本编辑。如果是 PowerPoint,则复制粘贴以下代码:

#Requires AutoHotkey v2.0; 获取正在运行的 PowerPoint 应用GetPPT() {    try {        return ComObjActive("PowerPoint.Application")    } catch {        return    }}; 判断是否正在放映IsSlideShowRunning(ppt) {    try {        return ppt.SlideShowWindows.Count > 0    } catch {        return false    }}; 下一页PPT_Next() {    ppt := GetPPT()    if !ppt        return    if IsSlideShowRunning(ppt)        ppt.SlideShowWindows(1).View.Next()}; 上一页PPT_Prev() {    ppt := GetPPT()    if !ppt        return    if IsSlideShowRunning(ppt)        ppt.SlideShowWindows(1).View.Previous()}; —— 绑定翻页键 —— $PgDn::PPT_Next()$PgUp::PPT_Prev()

如果是 WPS,则复制粘贴以下代码:

#Requires AutoHotkey v2.0; 获取正在运行的 WPS 演示应用GetWPS() {    try {        return ComObjActive("KWPP.Application")    } catch {        return    }}; 获取当前放映窗口GetWPSSlideShowWindow(wps) {    try {        if wps.SlideShowWindows.Count > 0            return wps.SlideShowWindows(1)    } catch {        return    }}; 判断是否正在放映IsSlideShowRunning(wps) {    try {        return wps.SlideShowWindows.Count > 0    } catch {        return false    }}; 切换到放映窗口ActivateSlideShowWindow(wps) {    slideShowWindow := GetWPSSlideShowWindow(wps)    if slideShowWindow {        ; 激活放映窗口        slideShowWindow.Activate()    }}; 下一页WPS_Next() {    wps := GetWPS()    if !wps        return    if IsSlideShowRunning(wps) {        ActivateSlideShowWindow(wps)  ; 确保窗口被激活        wps.SlideShowWindows(1).View.Next()    }}; 上一页WPS_Prev() {    wps := GetWPS()    if !wps        return    if IsSlideShowRunning(wps) {        ActivateSlideShowWindow(wps)  ; 确保窗口被激活        wps.SlideShowWindows(1).View.Previous()    }}; —— 绑定翻页键 —— $PgDn::WPS_Next()$PgUp::WPS_Prev()

3. 测试翻页笔的按键对应键位,可用在线网站测试。

链接:https://www.zfrontier.com/lab/keyboardTester

  • 如果是对应键盘的 PageUp 和 PageDown 键位,那么上面的代码不用修改;
  • 如果是对应左右方向键位,则需要把最后的两行代码修改替换,用记事本即可编辑。

; —— 绑定翻页键 —— $Right::PPT_Next()$Left::PPT_Prev()

4. 打开一个 PPT 文件,放映,确认翻页笔正常可用。

5. 运行 AutoHotkey,然后双击 demo.ahk,此时任务栏右下角会出现绿色的图标。

6. 让放映窗口处于非活动状态(可按下Win键),翻页笔翻页测试是否能翻页。

7. 设置开机启动,Win + R → 输入 shell:startup → 回车,把 demo.ahk 文件移动/复制到打开的文件夹。

注:我已经上传了 .ahk 文件到 GitHub,不想复制粘贴,可以直接跳转手动下载。

链接:https://github.com/Xpilot-Echo/SlideFree

▍注意事项

添加白名单

部分杀毒软件会对.ahk 文件(特别是对下载的.ahk 文件)进行拦截隔离,需要添加白名单。

保护性视图问题

PowerPoint 会对从网络(浏览器等)下载的 PPT 文件启用的保护模式,打开界面会提示风险「保护性视图」,在此模式下,会影响翻页笔的正常翻页,因为 AutoHotkey 拦截了翻页笔的按键,但是无法发送到 PowerPoint 进程,导致翻页笔「失控」。

解决方案:在确认下载下来的文件是安全的情况下,在提示风险界面点击「启用编辑」,或者在资源管理器中,右键 PPT 文件,选择属性,在选项卡「解除保护」框打勾✔

作者:EchoYu
责编:Lotta