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.

GetNetworkPath

War es hilfreich?

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

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top