Verwenden Sie die Zwischenablage von VBScript
-
02-07-2019 - |
Frage
Ich bin für eine Methode suchen, um etwas Text in die Zwischenablage mit VBScript zu platzieren. Die VBScript in Frage wird im Rahmen unseres Anmeldeskripts eingesetzt werden. Ich möchte mit, alles zu vermeiden, das nicht auf einem sauberen Windows XP-System ist.
Edit: In Antwort auf die Frage, was dies für.
Wir wollten Benutzer innerhalb unserer Organisation fördern, um den Dateiserver zu verwenden, um Dokumente zu übertragen, anstatt ständig Senden von Anhängen per E-Mail. Eines der größten Hindernisse dafür ist, dass es den Leuten, was die richtige Netzwerkpfad zu einer Datei / Ordner nicht immer offensichtlich ist. Wir entwickelten eine schnelle Skript und befestigt es in das Kontextmenü von Windows, so dass ein Benutzer direkt auf eine beliebige Datei / Ordner klicken können, und eine URL, die sie benötigen, um jemanden in unserer Organisation eine E-Mail kann.
Ich möchte die URL in dem Dialogfeld angezeigt, um auch in die Zwischenablage kopiert werden.
Lösung
Microsoft gibt keine Möglichkeit für VBScript, um direkt auf die Zwischenablage zugreifen. Wenn Sie eine Suche nach 'clipboard'
on
Andere Tipps
Eine andere Lösung, die ich gefunden habe, die meiner Meinung nach nicht perfekt ist, aber nicht über die lästigen Sicherheitswarnungen ist Clip.exe von einem w2k3 Server zu verwenden.
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
Beispiel mit einem mehrzeiligen String als pro Frage unter
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
Die nächste Lösung, die ich bisher gefunden habe, ist eine Methode IE zu verwenden Material auf die Zwischenablage zu erhalten und eingestellt. Das Problem bei dieser Lösung ist der Anwender Sicherheitswarnungen erhält. Ich bin versucht, sich zu bewegen ‚about: blank‘. Auf den lokalen Computer Sicherheitszone so dass ich nicht die Warnungen erhalten, aber ich bin nicht sicher, was die Auswirkungen auf die Sicherheit der das wäre
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
Mit Microsofts Clip.exe ist in der Nähe eine saubere Windows XP-Systemlösung zu haben. Allerdings müssen Sie nicht cmd.exe nennen es, um zu bewirten, es zu benutzen. Sie können es direkt anrufen und an seinen Eingangsstrom in Ihrem Script-Code schreiben. Sobald Sie den Eingangsstrom Clip.exe schließen, wird der Inhalt direkt in die Zwischenablage schreiben.
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
Wenn Sie Clip warten müssen fertig sein, bevor das Skript Verarbeitung fortsetzen kann dann hinzufügen
' loop until we're finished working.
Do While oExec.Status = 0
WScript.Sleep 100
Loop
Und vergessen Sie nicht, Ihre Objekte zu lösen
Set oIn = Nothing
Set oExec = Nothing
die Sicherheitswarnungen mit Internet Explorer und Zugriff auf die Zwischenablage verbunden sind, zu vermeiden, würde ich empfehlen, die Word-Anwendung verwenden Objekt und seine Methoden, um Ihre Daten in die Zwischenablage zu stellen. Natürlich kann man dies nur auf einem Computer verwenden, die MS Word installiert ist, aber in diesen Tagen, die meisten von ihnen ist. (* Trotz der Tatsache, dass Sie für Sachen auf einem ‚sauberen‘ System :) gefragt *)
' 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
Sie können ausführlich auf der MS Word-Anwendung Objekt und seine Methoden finden Sie hier: http://msdn.microsoft.com/en-us/library/aa221371 (office.11) aspx
Hier ist eine andere Version mit dem „Clip“ -Befehl, der Zeilenvorschub bis zum Ende des Strings Hinzufügen eines Wagenrücklauf vermeidet:
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
Ich habe getestet nur dies in XP. Clip.exe heruntergeladen wurde von http://www.petri.co.il/downloads/clip .zip und unter C:. \
Keine Sicherheitswarnungen, voll lassen und erhalten Sie Zugang:
'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
Beispiel Verwendung.
' 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
Ich habe einen Weg gefunden, Multi-Line-Informationen zu kopieren, indem Sie Vbscript / cmd in die Zwischenablage kopieren.
Sequenz:
- mit VBS erzeugen die endgültige „formatierten String“, die Sie kopieren müssen in die Zwischenablage kopieren
- erzeugt einen (txt) mit dem "Format String" Datei
- Nutzungsart Befehl von cmd Informationen einzufügen von Rohr zu befestigen
Beispielscript:
Function CopyToClipboard( sInputString )
Dim oShell: Set oShell = CreateObject("WScript.Shell")
Dim sTempFolder: sTempFolder = oShell.ExpandEnvironmentStrings("%TEMP%")
Dim sFullFilePath: sFullFilePath = sTempFolder & "\" & "temp_file.txt"
Const iForWriting = 2, bCreateFile = True
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
With oFSO.OpenTextFile(sFullFilePath, iForWriting, bCreateFile)
.Write sInputString
.Close
End With
Const iHideWindow = 0, bWaitOnReturnTrue = True
Dim sCommand: sCommand = "CMD /C TYPE " & sFullFilePath & "|CLIP"
oShell.Run sCommand, iHideWindow, bWaitOnReturnTrue
Set oShell = Nothing
Set oFSO = Nothing
End Function
Sub Main
Call CopyToClipboard( "Text1" & vbNewLine & "Text2" )
End Sub
Call Main
ersonnen ich einen anderen Weg IE zu verwenden und noch Sicherheitswarnungen vermeiden ...
Durch die Art und Weise .. diese Funktion in JavaScript ist .. aber u kann es zu VBScript leicht umwandeln ..
function CopyText(sTxt) {
var oIe = WScript.CreateObject('InternetExplorer.Application');
oIe.silent = true;
oIe.Navigate('about:blank');
while(oIe.ReadyState!=4) WScript.Sleep(20);
while(oIe.document.readyState!='complete') WSript.Sleep(20);
oIe.document.body.innerHTML = "<textarea id=txtArea wrap=off></textarea>";
var oTb = oIe.document.getElementById('txtArea');
oTb.value = sTxt;
oTb.select();
oTb = null;
oIe.ExecWB(12,0);
oIe.Quit();
oIe = null;
}
Hier ist Srikanth Methode in vbs übersetzt
function SetClipBoard(sTxt)
Set oIe = WScript.CreateObject("InternetExplorer.Application")
oIe.silent = true
oIe.Navigate("about:blank")
do while oIe.ReadyState <> 4
WScript.Sleep 20
loop
do while oIe.document.readyState <> "complete"
WScript.Sleep 20
loop
oIe.document.body.innerHTML = "<textarea id=txtArea wrap=off></textarea>"
set oTb = oIe.document.getElementById("txtArea")
oTb.value = sTxt
oTb.select
set oTb = nothing
oIe.ExecWB 12,0
oIe.Quit
Set oIe = nothing
End function
function GetClipBoard()
set oIe = WScript.CreateObject("InternetExplorer.Application")
oIe.silent = true
oIe.Navigate("about:blank")
do while oIe.ReadyState <> 4
WScript.Sleep 20
loop
do while oIe.document.readyState <> "complete"
WScript.Sleep 20
loop
oIe.document.body.innerHTML = "<textarea id=txtArea wrap=off></textarea>"
set oTb = oIe.document.getElementById("txtArea")
oTb.focus
oIe.ExecWB 13,0
GetClipBoard = oTb.value
oTb.select
set oTb = nothing
oIe.Quit
Set oIe = nothing
End function
Der einfachste Weg ist zu verwenden integrierte in mshta.exe
Funktionalität:
sText = "Text Content"
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & Replace(Replace(sText, "\", "\\"), "'", "\'") & "');close();""", 0, True
setzen, um eine Zeichenfolge mit doppelten Anführungszeichen char "
in die Zwischenablage kopieren, verwenden Sie den folgenden Code ein:
sText = "Text Content and double quote "" char"
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & Replace(Replace(Replace(sText, "\", "\\"), """", """"""), "'", "\'") & "'.replace('""""',String.fromCharCode(34)));close();""", 0, True
Hier finden Sie aktuelle diesen Beitrag . Es beschreibt einen Hacky Ansatz lesen aus der Zwischenablage, aber ich glaube, es angepasst werden könnte, um auch ebenso, wie das Ändern der Strg + V Strg + A und STRG + C in die Zwischenablage zu schreiben.
In Ihrer Klasse ClipBoard
weder die Lösch- Unter noch die Let Datenunter Arbeit. Ich meine, sie keine Auswirkungen auf Windows Clipboard
haben. Eigentlich und ironischerweise so, ist der einzige Unter der funktioniert, ist diejenige, die Sie nicht in Ihrem Beispiel enthalten sind, dh Daten importieren! (Ich habe diesen Code schon ein paar Mal getestet.)
Allerdings ist es nicht deine Schuld. Ich habe versucht, Daten zu kopieren mit ClipboardData.SetData in die Zwischenablage kopieren und es ist unmöglich. Zumindest nicht, indem sie ein „Htmlfile“ Objekt zu erzeugen. Vielleicht klappt es durch eine Instanz von „InternetExplorer.Application“ zu schaffen, wie ich in einigen Fällen gesehen haben, aber ich habe es nicht versucht. Ich hasse es zu schaffen Anwendungsinstanzen für eine solche einfache Aufgaben!
Alkis
Wenn es nur Text ist können Sie nicht einfach eine Textdatei erstellen und in den Inhalt zu lesen, wenn Sie es brauchen?
Eine weitere Alternative und eindeutig eine Flickschusterei, wäre die SendKeys()
Methode zu verwenden.
Keine Sicherheitswarnungen und kein Wagenrücklauf am Ende der Zeile
' value to put in Clipboard
mavaleur = "YEAH"
' current Dir
path = WScript.ScriptFullName
GetPath = Left(path, InStrRev(path, "\"))
' Put the value in a file
Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile=GetPath & "fichier.valeur"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write mavaleur
objFile.Close
' Put the file in the Clipboard
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c clip < " & outFile, 0, TRUE
' Erase the file
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile outFile