如何让AutoHotkey脚本实时获取Windows剪贴板最新内容?
解决AutoHotkey剪贴板内容不更新的问题
你的脚本问题在于:每次触发快捷键时,%Clipboard%是在添加编辑框控件的瞬间读取的旧值,没有实时获取最新剪贴板内容;另外重复按快捷键会创建多个独立GUI窗口,不符合使用习惯。
下面提供两种针对性解决方案:
方案1:打开GUI时加载当前剪贴板内容
适合仅需要打开窗口时显示最新剪贴板,不需要实时更新的场景:
<^>!x:: ; AltGr + x ; 检查窗口是否已存在,存在则激活并更新内容 IfWinExist, 剪贴板查看器 { WinActivate ClipWait, 0 ; 确保读取最新剪贴板内容 GuiControl,, Edit1, %Clipboard% Return } ; 不存在则创建新窗口 Gui +Resize +MinSize300x200 Gui, Add, Edit, vEdit1, %Clipboard% ; 给编辑框命名,方便后续更新 Gui, Show,, 剪贴板查看器 Return GuiClose: Gui, Destroy ; 关闭时销毁窗口 Return
方案2:实时监听剪贴板变化,动态更新编辑框
适合窗口打开后,剪贴板内容变化时自动同步更新的场景:
<^>!x:: ; AltGr + x IfWinExist, 剪贴板查看器 { WinActivate Return } Gui +Resize +MinSize300x200 Gui, Add, Edit, vEdit1, %Clipboard% Gui, Show,, 剪贴板查看器 OnClipboardChange("ClipboardUpdated") ; 注册剪贴板变化监听 Return ClipboardUpdated(Type) { ; 仅当窗口存在时更新内容 IfWinExist, 剪贴板查看器 { ClipWait, 0 GuiControl,, Edit1, %Clipboard% } Else { OnClipboardChange("") ; 窗口关闭后取消监听 } } GuiClose: OnClipboardChange("") ; 关闭窗口时取消监听 Gui, Destroy Return
关键修改说明
- 给GUI窗口和编辑框命名,方便后续激活窗口、更新控件内容
- 使用
ClipWait, 0确保读取的是最新剪贴板内容,避免复制操作未完成时读取旧值 - 方案2通过
OnClipboardChange注册回调函数,实现剪贴板内容变化时自动同步 - 关闭窗口时销毁控件并取消监听,避免不必要的资源占用
内容的提问来源于stack exchange,提问作者Pingui
相关产品推荐
相关产品推荐

