回复 6# 523066680
噗...我看手册复制偏了...
忽然发现 ahk 好像没法直接复制文件,请教了一下 tmplinshi 大师,得到了一大坨代码: | | | | | SetWorkingDir %A_ScriptDir% | | SetBatchLines -1 | | | | fileList := " | | (LTrim | | js.txt | | e:\我的文档\桌面\vcode\18.jpg | | )" | | FileToClipboard(fileList) | | | | FileToClipboard(PathToCopy, Method="copy") | | { | | ; 展开为完整路径 | | Loop, Parse, PathToCopy, `n, `r | | Loop, %A_LoopField% | | PathToCopy_Full .= "`n" A_LoopFileLongPath | | PathToCopy := Trim(PathToCopy_Full, "`n") | | | | FileCount:=0 | | PathLength:=0 | | | | ; Count files and total string length | | Loop,Parse,PathToCopy,`n,`r | | { | | FileCount++ | | PathLength += StrLen(A_LoopField) | | } | | | | pid:=DllCall("GetCurrentProcessId","uint") | | hwnd:=WinExist("ahk_pid " . pid) | | ; 0x42 = GMEM_MOVEABLE(0x2) | GMEM_ZEROINIT(0x40) | | hPath := DllCall("GlobalAlloc","uint",0x42,"uint",20 + (PathLength + FileCount + 1) * 2,"UPtr") | | pPath := DllCall("GlobalLock","UPtr",hPath) | | NumPut(20,pPath+0),pPath += 16 ; DROPFILES.pFiles = offset of file list | | NumPut(1,pPath+0),pPath += 4 ; fWide = 0 -->ANSI,fWide = 1 -->Unicode | | Offset:=0 | | Loop,Parse,PathToCopy,`n,`r ; Rows are delimited by linefeeds (`r`n). | | offset += StrPut(A_LoopField,pPath+offset,StrLen(A_LoopField)+1,"UTF-16") * 2 | | | | DllCall("GlobalUnlock","UPtr",hPath) | | DllCall("OpenClipboard","UPtr",hwnd) | | DllCall("EmptyClipboard") | | DllCall("SetClipboardData","uint",0xF,"UPtr",hPath) ; 0xF = CF_HDROP | | | | ; Write Preferred DropEffect structure to clipboard to switch between copy/cut operations | | ; 0x42 = GMEM_MOVEABLE(0x2) | GMEM_ZEROINIT(0x40) | | mem := DllCall("GlobalAlloc","uint",0x42,"uint",4,"UPtr") | | str := DllCall("GlobalLock","UPtr",mem) | | | | if (Method="copy") | | DllCall("RtlFillMemory","UPtr",str,"uint",1,"UChar",0x05) | | else if (Method="cut") | | DllCall("RtlFillMemory","UPtr",str,"uint",1,"UChar",0x02) | | else | | { | | DllCall("CloseClipboard") | | return | | } | | | | DllCall("GlobalUnlock","UPtr",mem) | | | | cfFormat := DllCall("RegisterClipboardFormat","Str","Preferred DropEffect") | | DllCall("SetClipboardData","uint",cfFormat,"UPtr",mem) | | DllCall("CloseClipboard") | | return | | }COPY |
|