返回列表 发帖
本帖最后由 CrLf 于 2014-7-6 04:14 编辑

如果只是文件名那好办,不用 clip.exe 的办法是:
(以 powershell -sta 启动后)
Add-Type -Assembly PresentationCore
$a='a.txt','b.txt','c.txt'
[Windows.Clipboard]::SetText($a -join "`n")COPY
复制文件可以这样:
$filelist = 'c:\a.txt','d:\b.txt'
$col = New-Object Collections.Specialized.StringCollection
foreach($file in $filelist){$col.add($file)}
[Windows.Clipboard]::setfiledroplist($col)COPY
----------------------------------------------------------------
不过这种事其实用 ahk 更合适,复制文件名:
Clipboard:= "c:\a.txt`r`nd:\b.txt"COPY
复制文件:
FileAppend, %ClipboardAll%, c:\a.txt
FileAppend, %ClipboardAll%, d:\b.txtCOPY

TOP

回复 6# 523066680


    噗...我看手册复制偏了...
忽然发现 ahk 好像没法直接复制文件,请教了一下 tmplinshi 大师,得到了一大坨代码:
#NoEnv
#SingleInstance Force
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

TOP

回复 6# 523066680


    ahk 比 nircmd 强大太多了好吧

TOP

返回列表