2013-10-31 72 views
2

編者按
雖然這個問題是專門關於複製文件引用到剪貼板,它的通用稱謂引發了有關如何複製的答案/獲取文本
如何在vbscript中使用剪貼板?

由於在Windows中的Emacs用戶誰經常在郵件附加的文件,我一直在尋找一個實用程序來複制一個文件(不是其內容)到剪貼板,就像Windows資源管理器確實在righclick /份) 。

我剛剛發現this就在這裏,它在一個小程序中使用System.Windows.Forms.Clipboard`來做到這一點。但它在C#中,我沒有立即訪問編譯器。所以我想知道這是否可以完成,以及如何。

我看到了幾個參考,如this剪貼板不能在VBScripting訪問,但msdn shows文檔的VB,所以我冒着這個問題。

我從來沒有寫一個VBScript,但我沒有問,開始與運行粘貼「世界你好」和CreateObject

更新,然後各種組合複製之前嘗試的幾件事情:我需要調用Clipboard.SetFileDropList,所以我不認爲我可以使用ClipboardData的答案建議,它沒有這種方法。

更新爲遊客

我結束了使用的解決方案是編譯C#本身,我不知道我已經有一個編譯器。

訪問者的另一個更新 https://stackoverflow.com/a/29963268/18573是我現在使用,很高興。

+0

[使用從VBScript剪貼板(http://stackoverflow.com/questions/128463/use-clipboard-from-vbscript)的可能的複製 – Lankymart

+0

@Lankymart似乎問題是關於加入一些文字* *到剪貼板,而不是關於文件對象。有關我正在使用的解決方案,請參閱http://stackoverflow.com/a/29963268/18573 –

+2

在這種情況下,您需要優化問題,尤其是標題。 – Lankymart

回答

3

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 
10

您可以用HTML對象這樣做是爲了獲取剪貼板中的內容:

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

編輯:我使用這段代碼將文本放回剪貼板,但它需要第三方軟件;一個獨立的可執行文件'剪輯。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)

+0

Clip現在默認在Windows(Win7)中。 WriteLine的解決方案將附加一個換行符。此解決方案將在以下位置添加一個空格:wshShell.Run「cmd.exe/c set/p =」&text&「

0

你需要這個功能(是的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