5

编者注
虽然这个问题专门关于将文件引用复制到剪贴板,但其通用标题导致了有关如何复制/获取 文本的答案。

作为 Windows 上经常在邮件中附加文件的 Emacs 用户,我一直在寻找一个实用程序来将文件(而不是其内容)复制到剪贴板,就像 Windows 资源管理器在右键单击/复制时所做的那样)。

我刚刚在 SO 上找到了这个,它在一个小程序中使用 System.Windows.Forms.Clipboard` 来做到这一点。但它在 C# 中,我无法立即访问编译器。所以我想知道这是否可以做到以及如何做到。

我看到了一些参考资料,例如VBScripting 中无法访问剪贴板,但 msdn显示了 VB 的文档,所以我冒着这个问题的风险。

我以前从未编写过 VBScript,但在询问之前我确实尝试了一些事情,从运行粘贴“Hello world”的副本开始,然后是各种组合CreateObject等。

更新:我需要打电话Clipboard.SetFileDropList,所以我认为我不能ClipboardData按照答案的建议使用,它没有这个方法。

访客更新

我最终使用的解决方案是自己编译C#,我不知道我已经有一个编译器。

访问者的另一个更新 https://stackoverflow.com/a/29963268/18573是我现在正在使用的,非常高兴。

4

4 回答 4

16

您可以使用 html 对象来检索剪贴板的内容:

' Get clipboard text
Set objHTML = CreateObject("htmlfile")
text = objHTML.ParentWindow.ClipboardData.GetData("text")

编辑:我使用这个片段将文本放回剪贴板,但它需要第三方软件;可以在 Windows 2003 Server 或仅在Internet上找到的独立可执行文件“clip.exe” :

' Do something with the text
text = replace(text, "you ", "you and your dog ")

' Put it back to the clipboard
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("clip")

Set oIn = oExec.stdIn

oIn.WriteLine text
oIn.Close

(是的,这有点像hackerdyhack)

于 2013-10-31T10:19:06.283 回答
4

VBScript 不支持剪贴板。大多数托管 vbscript 的主机,例如 Internet Explorer,都通过主机提供访问权限。因此在 IE 或 HTA 中运行的 vbscript 可以使用 IE 的剪贴板支持。脚本主机不提供剪贴板支持。您可以使用 vbs 文件通过 COM 自动化启动 IE,导航到本地页面(绕过安全警告),然后使用 IE 的剪贴板。

这是一个代码片段(Outp. 是一个文本流)

    Set ie = CreateObject("InternetExplorer.Application") 
ie.Visible = 0
ie.Navigate2 "C:\Users\David Candy\Desktop\Filter.html"
Do 
    wscript.sleep 100
Loop until ie.document.readystate = "complete"  
txt=ie.document.parentwindow.clipboardData.GetData("TEXT")
ie.quit
If IsNull(txt) = true then 
    outp.writeline "No text on clipboard"
else
    outp.writeline txt
End If
于 2013-10-31T02:08:40.173 回答
4

你需要这个函数(是对this的一点修改):

'TO CLEAR
ClipBoard("")

'TO SET
ClipBoard("Hello World!")

'TO GET
Result = ClipBoard(Null)

Function ClipBoard(input)
'@description: A quick way to set and get your clipboard.
'@author: Jeremy England (SimplyCoded)
  If IsNull(input) Then
    ClipBoard = CreateObject("HTMLFile").parentWindow.clipboardData.getData("Text")
    If IsNull(ClipBoard) Then ClipBoard = ""
  Else
    CreateObject("WScript.Shell").Run _
      "mshta.exe javascript:eval(""document.parentWindow.clipboardData.setData('text','" _
      & Replace(Replace(Replace(input, "'", "\\u0027"), """","\\u0022"),Chr(13),"\\r\\n") & "');window.close()"")", _
      0,True
  End If
End Function
于 2018-01-31T17:47:37.023 回答
0

对于等效于“粘贴”操作,我将运行ClipOutpaste之类的命令行实用程序,将输出重定向到文件并读取文件内容。

return = WshShell.Run("cmd /c clipout.exe > output.txt", 0, true)

Set fso  = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("output.txt", 1)
text = file.ReadAll
file.Close

您可以在此处获取 ClipOut:http: //jasonfaulkner.com/ClipOut.aspx

你可以在这里粘贴:https ://www.c3scripts.com/tutorials/msdos/paste.html

对于相当于“复制”操作,我将使用Windows 实际附带的clip命令行实用程序和上面的类似代码。

关于剪辑实用程序:https ://blogs.msdn.microsoft.com/oldnewthing/20091110-00/?p=16093

于 2018-09-09T00:19:36.997 回答