首页 文章

如何在vbscript中使用剪贴板?

提问于
浏览
2

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

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

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

我看到了几个引用,如this,在VBScripting中无法访问剪贴板,但是VB的msdn shows文档,所以我冒着风险提问 .

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

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

Update for visitors

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

Another update for visitors https://stackoverflow.com/a/29963268/18573就是我现在正在使用的,非常开心 .

4 回答

  • 0

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

    这是一个代码snippit(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
    
  • 4

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

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

    EDIT: 我使用此片段将文本放回剪贴板,但它需要第三方软件;一个独立的可执行文件'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
    

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

  • 10

    你需要这个功能(对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
    
  • 1

    对于"paste"操作的等效操作,我将运行一个命令行实用程序,如ClipOut或粘贴,将输出重定向到文件并读取文件内容 .

    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

    对于"copy"操作的等价物,我将使用实际附带Windows的剪辑命令行实用程序和类似的代码 .

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

相关问题