使用VBScript中的剪贴板

Zor*_*che 18 vbscript clipboard windows-xp

我正在寻找一种方法,用VBScript将一些文本放在剪贴板上.有问题的VBScript将作为我们的登录脚本的一部分进行部署.我想避免使用干净的Windows XP系统上没有的任何东西.

编辑: 回答有关这是什么的问题.

我们希望鼓励组织内的用户使用文件服务器来传输文档,而不是通过电子邮件不断发送附件.对此最大的障碍之一是人们并不总是明白文件/文件夹的正确网络路径是什么.我们开发了一个快速脚本,并将其附加到Windows上下文菜单,以便用户可以右键单击任何文件/文件夹,并获取可以通过电子邮件发送给组织内某人的URL.

我希望对话框中显示的URL也放在剪贴板上.

GetNetworkPath

Zor*_*che 27

我发现的另一个解决方案在我看来并不完美,但没有恼人的安全警告是使用来自w2k3服务器的clip.exe.

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c echo hello world | clip", 0, TRUE
Run Code Online (Sandbox Code Playgroud)

http://www.petri.co.il/quickly_copy_error_and_display_messages.htm

根据下面的问题使用多行字符串的示例

Dim string
String = "text here" &chr(13)& "more text here"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c echo " & String & " | clip", 0, TRUE
Run Code Online (Sandbox Code Playgroud)

  • 太棒了!但是把多线变量放在"hello world"上呢? (2认同)
  • 这将失败,因为没有办法在 CMD shell 参数列表中传递*很多*的字符......例如“http://x.com/?var1&var2”`&`会破坏该脚本。 (2认同)

Zor*_*che 10

到目前为止我找到的最接近的解决方案是使用IE来获取和设置剪贴板上的东西的方法.此解决方案的问题是用户获得安全警告.我很想把'about:blank'移到本地计算机安全区,所以我没有得到警告,但我不确定这会带来什么样的安全隐患.

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", "Hello This Is A Test"
objIE.Quit
Run Code Online (Sandbox Code Playgroud)

http://www.microsoft.com/technet/scriptcenter/resources/qanda/dec04/hey1215.mspx


小智 10

使用Microsoft的clip.exe最接近于拥有干净的Windows XP系统解决方案.但是,您不必调用CMD.EXE来托管它以便使用它.您可以直接调用它并在脚本代码中写入其输入流.关闭输入流后,clip.exe会将内容直接写入剪贴板.

Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("clip")
Set oIn = oExec.stdIn
oIn.WriteLine "Something One"
oIn.WriteLine "Something Two"
oIn.WriteLine "Something Three"
oIn.Close
Run Code Online (Sandbox Code Playgroud)

如果您需要等待剪辑完成,然后脚本才能继续处理,然后添加

' loop until we're finished working.
Do While oExec.Status = 0
    WScript.Sleep 100
Loop
Run Code Online (Sandbox Code Playgroud)

并且不要忘记释放您的对象

Set oIn = Nothing
Set oExec = Nothing
Run Code Online (Sandbox Code Playgroud)

  • @Tmdean 不正确,尤其是在数据库任务方面,您不希望资源在不再需要后保持打开状态。Eric 所说的是在具有自己作用域的函数内部使用,当它们超出作用域时,对象将被销毁,因此无需手动取消引用它们。 (2认同)

unr*_*rip 7

为避免与Internet Explorer和剪贴板访问相关的安全警告,我建议您使用Word应用程序对象及其方法将数据放入剪贴板.当然,你只能在安装了MS Word的机器上使用它,但是现在大多数都是这样.(*尽管你在"清洁"系统上要求的东西:)*)

' Set what you want to put in the clipboard '
strMessage = "Imagine that, it works!"

' Declare an object for the word application '
Set objWord = CreateObject("Word.Application")

' Using the object '
With objWord
   .Visible = False         ' Don't show word '
   .Documents.Add           ' Create a document '
   .Selection.TypeText strMessage   ' Put text into it '
   .Selection.WholeStory        ' Select everything in the doc '
   .Selection.Copy          ' Copy contents to clipboard '
   .Quit False          ' Close Word, don't save ' 
End With
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到有关MS Word应用程序对象及其方法的详细信息:http://msdn.microsoft.com/en-us/library/aa221371(office.11​​).aspx


swy*_*wyx 6

没有安全警告,完全允许和获取访问权限:

'create a clipboard thing
 Dim ClipBoard
 Set Clipboard = New cClipBoard

 ClipBoard.Clear  
 ClipBoard.Data = "Test"

Class cClipBoard
        Private objHTML

                Private Sub Class_Initialize
                        Set objHTML = CreateObject("htmlfile")
                End Sub

                Public Sub Clear()
                        objHTML.ParentWindow.ClipboardData.ClearData()
                End Sub

                Public Property Let Data(Value)
                        objHTML.ParentWindow.ClipboardData.SetData "Text" , Value
                End Property

                Public Property Get Data()
                        Data = objHTML.ParentWindow.ClipboardData.GetData("Text")
                End Property

                Private Sub Class_Terminate
                        Set objHTML = Nothing
                End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

示例用法。

' Create scripting object
Dim WShell, lRunUninstall
Set WShell = CreateObject("WScript.Shell")
WShell.sendkeys "^c"
WScript.Sleep 250
bWindowFound = WShell.AppActivate("Microsoft Excel")
 WShell.sendkeys ClipBoard.Data
Run Code Online (Sandbox Code Playgroud)


tlo*_*ach 5

Microsoft没有提供让VBScript直接访问剪贴板的方法。如果您'clipboard'站点上进行搜索,则会看到:

尽管Visual Basic for Applications支持Screen,Printer,App,Debug,Err和Clipboard对象,但VBScript仅支持Err对象。因此,VBScript不允许您访问诸如鼠标指针或剪贴板之类的有用对象。但是,可以使用Err对象为应用程序提供运行时错误处理。

因此,仅使用VBScript就可以最好地间接使用记事本。


小智 5

这是使用"clip"命令的另一个版本,它避免了在字符串末尾添加回车符,换行符:

strA= "some character string"
Run Code Online (Sandbox Code Playgroud)
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "cmd /C echo . | set /p x=" & strA & "| c:\clip.exe", 2
Run Code Online (Sandbox Code Playgroud)
s = "String: """ & strA & """ is on the clipboard."
Wscript.Echo s
Run Code Online (Sandbox Code Playgroud)

我只在XP中测试过这个.clip.exe从http://www.petri.co.il/downloads/clip.zip下载并放在C:\中.