You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:01:10