【问题标题】:How can I use Clipboard in vbscript? [duplicate]如何在 vbscript 中使用剪贴板? [复制]
【发布时间】:2013-10-31 00:25:39
【问题描述】:

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

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

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

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

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

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

访问者更新

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

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

【问题讨论】:

  • @Lankymart 似乎问题是关于向剪贴板添加一些 text ,而不是关于文件对象。有关我正在使用的解决方案,请参阅 stackoverflow.com/a/29963268/18573
  • 在这种情况下,您需要细化问题,尤其是标题。

标签: vbscript clipboard


【解决方案1】:

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

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

编辑:我使用这个 sn-p 将文本放回剪贴板,但它需要第三方软件;一个独立的可执行文件“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)

【讨论】:

  • Clip 现在默认在 Windows (Win7) 中。您使用 WriteLine 的解决方案将附加一个换行符。此解决方案将在以下内容后附加一个空格:wshShell.Run "cmd.exe /c set /p=" & text & "
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 如何获取Windows资源管理器的剪贴板(复制文件/文件夹的windows文件路径)?任何想法?我尝试搜索整个互联网和stackoverflow。但是对于特定的事情没有答案。
    【解决方案4】:

    对于相当于“粘贴”操作,我会运行一个命令行实用程序,如 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 命令行实用程序以及与上述类似的代码。

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

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多