如何用AHK v1遍历Windows剪贴板历史(Win+V呼出的历史)
在AHK v1中遍历Windows剪贴板历史(Win+V记录)
AHK v1没有原生命令直接读取系统剪贴板历史,但可以通过调用Windows原生API实现,以下是符合你需求的遍历逻辑代码,和你提供的逐行解析代码结构一致,会逐个遍历剪贴板历史中的文本项:
; 加载并获取剪贴板历史相关API函数 DllCall("LoadLibrary", "Str", "user32.dll") GetClipboardHistoryItemCount := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", "GetClipboardHistoryItemCount", "Ptr") GetClipboardHistoryItem := DllCall("GetProcAddress", "Ptr", DllCall("GetModuleHandle", "Str", "user32.dll", "Ptr"), "AStr", "GetClipboardHistoryItem", "Ptr") ; 获取剪贴板历史总项数 itemCount := DllCall(GetClipboardHistoryItemCount, "UInt") if (itemCount = 0) { MsgBox, 剪贴板历史为空或未开启,请先通过Win+V开启系统剪贴板历史 return } ; 逐个遍历剪贴板历史项 Loop, % itemCount { itemIndex := A_Index - 1 ; API索引从0开始 hData := 0 result := DllCall(GetClipboardHistoryItem, "UInt", itemIndex, "PtrP", hData) if (result && hData) { pData := DllCall("GlobalLock", "Ptr", hData, "Ptr") if (pData) { clipText := StrGet(pData, "UTF-16") DllCall("GlobalUnlock", "Ptr", hData) ; 弹出确认框,逻辑和你的示例一致 MsgBox, 4, , 剪贴板历史项 %A_Index%:`n%clipText%`n`n继续遍历? IfMsgBox, No, break } DllCall("GlobalFree", "Ptr", hData) } }
关键说明:
- 仅支持Win10 1809及以上系统(该版本才引入剪贴板历史API)
- 系统剪贴板历史需处于开启状态(可通过Win+V面板确认)
- 代码仅处理文本类型的剪贴板项,会自动跳过图片、文件等非文本内容
扩展方向:
你可以基于这段代码调整,适配你的使用场景:
- 提取最近N项文本存入数组,方便快速调用填写表单
- 绑定快捷键,直接将指定索引的剪贴板内容插入当前输入框
- 定期自动备份最近剪贴板文本到本地文件
内容的提问来源于stack exchange,提问作者Pingui
相关产品推荐
相关产品推荐

