我正在寻找一种方法,用VBScript将一些文本放在剪贴板上.有问题的VBScript将作为我们的登录脚本的一部分进行部署.我想避免使用干净的Windows XP系统上没有的任何东西.
编辑: 回答有关这是什么的问题.
我们希望鼓励组织内的用户使用文件服务器来传输文档,而不是通过电子邮件不断发送附件.对此最大的障碍之一是人们并不总是明白文件/文件夹的正确网络路径是什么.我们开发了一个快速脚本,并将其附加到Windows上下文菜单,以便用户可以右键单击任何文件/文件夹,并获取可以通过电子邮件发送给组织内某人的URL.
我希望对话框中显示的URL也放在剪贴板上.
GetNetworkPath
我发现的另一个解决方案在我看来并不完美,但没有恼人的安全警告是使用来自w2k3服务器的clip.exe.
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "cmd.exe /c echo hello world | clip", 0, TRUE
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
到目前为止我找到的最接近的解决方案是使用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
http://www.microsoft.com/technet/scriptcenter/resources/qanda/dec04/hey1215.mspx
使用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
如果您需要等待剪辑完成,然后脚本才能继续处理,然后添加
' loop until we're finished working. Do While oExec.Status = 0 WScript.Sleep 100 Loop
并且不要忘记释放您的对象
Set oIn = Nothing Set oExec = Nothing
为避免与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
您可以在此处找到有关MS Word应用程序对象及其方法的详细信息:http://msdn.microsoft.com/en-us/library/aa221371(office.11).aspx
Microsoft没有提供让VBScript直接访问剪贴板的方法。如果您'clipboard'
在此站点上进行搜索,则会看到:
尽管Visual Basic for Applications支持Screen,Printer,App,Debug,Err和Clipboard对象,但VBScript仅支持Err对象。因此,VBScript不允许您访问诸如鼠标指针或剪贴板之类的有用对象。但是,可以使用Err对象为应用程序提供运行时错误处理。
因此,仅使用VBScript就可以最好地间接使用记事本。
这是使用"clip"命令的另一个版本,它避免了在字符串末尾添加回车符,换行符:
strA= "some character string"
Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "cmd /C echo . | set /p x=" & strA & "| c:\clip.exe", 2
s = "String: """ & strA & """ is on the clipboard." Wscript.Echo s
我只在XP中测试过这个.clip.exe从http://www.petri.co.il/downloads/clip.zip下载并放在C:\中.