vbscript - español - ejecutar vbs
¿Cómo puedo usar el Portapapeles en vbscript? (2)
VBScript no es compatible con el portapapeles. La mayoría de los hosts que alojan vbscript, como Internet Explorer, dan acceso a través del host. Por lo tanto, vbscript que se ejecuta en IE o HTA puede usar el soporte del portapapeles de IE. Los hosts de scripting no dan soporte al portapapeles. Puede usar un archivo vbs para iniciar IE a través de la automatización COM, navegar a una página local (para eludir las advertencias de seguridad) y luego usar el portapapeles de IE.
Aquí hay un snippit de código (Outp. Es una secuencia de texto)
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
Nota del editor :
Si bien esta pregunta se trata específicamente de copiar una referencia de archivo al portapapeles, su título genérico generó respuestas sobre cómo copiar / obtener texto .
Como usuario de Emacs en Windows que a menudo adjunta archivos en correos electrónicos, he estado buscando una utilidad para copiar un archivo ( no su contenido ) en el portapapeles, tal como lo hace Windows Explorer en el botón derecho / copiar.
Acabo de encontrar esto aquí en SO, que usa System.Windows.Forms.Clipboard` en un pequeño programa para hacer exactamente eso. Pero está en C #, por lo que no tengo acceso inmediato a un compilador. Entonces me pregunto si esto se puede hacer y cómo.
Vi varias referencias como esta que el portapapeles no es accesible en VBScripting, pero msdn muestra documentación para VB, así que estoy arriesgando la pregunta.
Nunca antes había escrito un VBScript pero intenté algunas cosas antes de preguntar, comenzando con la ejecución de una copia pegada en un "Hola mundo" y luego varias combinaciones de CreateObject
etc.
Actualización: necesito llamar a Clipboard.SetFileDropList
, así que no creo que pueda usar ClipboardData
como lo sugieren las respuestas, no tiene este método.
Actualización para visitantes
La solución que terminé usando fue compilar el C#
sí, no sabía que ya tenía un compilador.
Otra actualización para los visitantes https://stackoverflow.com/a/29963268/18573 es lo que estoy usando, bastante feliz.
Puede hacerlo con un objeto html para recuperar el contenido del portapapeles:
'' Get clipboard text
Set objHTML = CreateObject("htmlfile")
text = objHTML.ParentWindow.ClipboardData.GetData("text")
EDITAR: uso este fragmento para poner el texto nuevamente en el portapapeles, pero necesita un software de terceros; un ejecutable independiente ''clip.exe'' que se puede encontrar en Windows 2003 Server o simplemente en 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
(Sí, todo es un poco hackerdyhack)