如何用AutoHotkey检测剪贴板中是否包含文件?
在AutoHotkey中区分剪贴板里的实际文件和文本路径
直接读取%Clipboard%时,复制的文件会被转成路径文本,没法和手动输入的路径字符串区分开。要解决这个问题,核心是检查剪贴板是否包含文件专用的格式(CF_HDROP)——这是系统复制文件时自动存入剪贴板的格式,普通文本路径不会有这个格式。
方法:自定义检测函数
写一个简单的函数,通过调用系统API判断剪贴板是否存在CF_HDROP格式:
ClipboardHasFiles() { ; 打开剪贴板 if !DllCall("OpenClipboard", "ptr", 0) return false ; 获取CF_HDROP格式的数据句柄(CF_HDROP的常量值是15) hDrop := DllCall("GetClipboardData", "uint", 15, "ptr") ; 关闭剪贴板(必须执行,否则其他程序无法访问剪贴板) DllCall("CloseClipboard") ; 如果句柄不为空,说明剪贴板里有文件 return hDrop != 0 }
使用示例
绑定一个快捷键来测试:
; 按F1键检测剪贴板内容 F1:: if ClipboardHasFiles() { MsgBox, 剪贴板里是实际的文件/文件夹 } else { MsgBox, 剪贴板里是普通文本(可能是路径字符串) } return
补充说明
- 这个方法只判断剪贴板是否包含文件,不关心路径文本是否有效;如果需要进一步验证路径是否真实存在,可以用
FileExist()函数配合%Clipboard%的内容。 - 不要忽略
CloseClipboard(),如果不关闭剪贴板,其他程序会无法访问它,容易引发问题。
内容的提问来源于stack exchange,提问作者Robb Hoff
相关产品推荐
相关产品推荐

