如何在vbscript中使用剪贴板?

Mis*_*ble 3 vbscript clipboard

编者注:
虽然这个问题具体是关于将文件引用复制到剪贴板,但它的通用标题导致了关于如何复制/获取文本的答案 .

作为Windows Emacs的用户经常谁在邮件附加的文件,我一直在寻找一个实用程序来复制一个文件(而不是其内容)到剪贴板,就像Windows资源管理器确实在righclick /份).

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

我看到了一些像这样的引用,在VBScripting中无法访问剪贴板,但msdn 显示了VB的文档,所以我冒着风险提问.

我以前从来没有写过VBScript,但我在尝试之前尝试了一些事情,首先是运行一个粘贴了"Hello world"的副本,然后是各种组合CreateObject等.

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

访客更新

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

访问者 /sf/answers/2097428791/的另一个更新是我现在正在使用的,非常愉快.

Aut*_*aos 13

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

' Get clipboard text
Set objHTML = CreateObject("htmlfile")
text = objHTML.ParentWindow.ClipboardData.GetData("text")
Run Code Online (Sandbox Code Playgroud)

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

' 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
Run Code Online (Sandbox Code Playgroud)

(是的,这一切都有点hackerdyhack)


小智 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
Run Code Online (Sandbox Code Playgroud)