Войти

Показать полную графическую версию : [решено] Работа с буфером обмена на VBS


BigBoo
08-09-2011, 02:28
Перерыл все справочники по VBS и нигде не нашёл команд по работе с буфером обмена. В частности интересует, как скопировать текст в буфер обмена?

Petya V4sechkin
08-09-2011, 07:22
Работа с буфером обмена (clipboard) в скриптовых языках JScript или VBScript (http://www.potolook.ru/blog/p,213/)

BigBoo
08-09-2011, 11:16
Petya V4sechkin, очень неприятно, что минус этого способа - "Internet Explorer" выдает запрос на разрешение доступа страницы к буферу, что сводит на нет процесс автоматизации действий при использовании скрипта. Есть ли ещё варианты?

SendMessage
08-09-2011, 16:14
Получение текста из буфера:
strText = CreateObject("HTMLFile").parentWindow.clipboardData.GetData("text")
Аналогичным методом копировать в буфер не получилось у меня. Или тяму не хватило, или не поддерживается.
А так получилось:
strTextToCB = "Текст, который хотелось вставить в буфер обмена"
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & StrTextToCB & "');close();""", 2

Iska
08-09-2011, 18:19
Аналогичным методом копировать в буфер не получилось у меня. Или тяму не хватило, или не поддерживается. »
Ранее поддерживался. С какого-то момента такую возможность прикрыли. Равно и «HTMLFile…GetData()» тоже может не срабатывать.

BigBoo
09-09-2011, 12:58
И в довершении темы, как прочитать текст из буфера?

Iska
09-09-2011, 13:34
BigBoo, см. выше:
Работа с буфером обмена (clipboard) в скриптовых языках JScript или VBScript (http://www.potolook.ru/blog/p,213/) »

BigBoo
09-09-2011, 16:15
см. выше: » Уже смотрел, вся проблема в раздражающий надписи Internet Explorer-а. Как прочитать текст из буфера, используя mshta.exe или другим способом?

BigBoo
09-09-2011, 16:30
И ещё один вопрос, как скопировать в буфер текст с сохранением перевода строки? То есть читаю файл: Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = CreateObject("WScript.Shell")

'Читаем файл построчно
LineAll = ""
Set tsLog = fso.OpenTextFile("Serial.txt", 1)
Do While Not tsLog.AtEndOfStream
LineInFile = tsLog.ReadLine
LineAll = LineAll & LineInFile & vbCRLF
Loop

'LineAll - текст с сохранением перевода строки

'Копирование текста в буфер обмена
WSHShell.Run "mshta.exe ""javascript:clipboardData.setData('text','" & LineAll & "');close();""", 2
В результате в буфере текст в одну строчку.

SendMessage
09-09-2011, 16:53
Как прочитать текст из буфера, используя mshta.exe »
strCmd = "mshta.exe ""javascript:var s=clipboardData.getData('text');if(s)new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(s);close();"""

strText = CreateObject("WScript.Shell").Exec(strCmd).StdOut.ReadAll
как скопировать в буфер текст с сохранением перевода строки? »
strTextToCB = "Текст, который хотелось вставить в буфер обмена" & vbCrLf & "с переводом строк."
strTextToCB = Replace(strTextToCB, vbCrLf, "\n")
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & StrTextToCB & "');close();""", 2
Но это чревато ошибками, как сразу можно заметить.

BigBoo
09-09-2011, 17:36
Но это чревато ошибками, как сразу можно заметить. »Спасибо, сработало на ура. А какие возможны ошибки?

Ещё нужно сказать, дополняя метод SendMessage, использование "mshta.exe" занимает некоторое время. Поэтому после этой команды в скрипте желательно поставить небольшую паузу, если данные буфера обмена требуется использовать незамедлительно.

testot
07-08-2012, 16:40
' test.vbs
' чтение из буфера обмена
Dim clipbrd
clipbrd = WScript.CreateObject("HTMLFile").parentWindow.clipboardData.getData("text")

' запись в буфер обмена
Dim wsh
Dim dataclip
dataclip = "отправляемый текст в буфер обмена"
Set wsh = WScript.CreateObject("WScript.Shell")
wsh.Run "cmd.exe /C <nul set /p ""="&dataclip &""" | CLIP", False ' не понимаю что тут, но переноса строки не стало
' wsh.Run "cmd.exe /c echo " & dataclip & " | clip", False

я не программист, но вот что наконструировал, работает
через clipboardData.setData не работает, предполагаю система безопасности винды не дает шалить с буфером
для меня остается проблемой то что в буфере появляется ненужный мне перенос строки

omegastripes
19-09-2013, 23:44
после этой команды в скрипте желательно поставить небольшую паузу, если данные буфера обмена требуется использовать незамедлительно. »
Можно вызвать метод Run с аргументом <WaitOnReturn> = True (http://www.script-coding.com/WSH/WshShell.html#3.4.) для ожидания выполнения команды.
Код
... wsh.Run "cmd.exe /C <nul set /p ""="&dataclip &""" | CLIP", False ...»
изменить вот так:
wsh.Run "cmd.exe /C <nul set /p ""="&dataclip &""" | CLIP", 0, True
Код
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & StrTextToCB & "');close();""", 2 »
соответственно:
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & StrTextToCB & "');close();""", 0, True

pzh2393
17-05-2017, 20:01
И ещё один вопрос, как скопировать в буфер текст с сохранением перевода строки? То есть читаю файл:

Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = CreateObject("WScript.Shell")
'Читаем файл построчно
LineAll = ""
Set tsLog = fso.OpenTextFile("Serial.txt", 1)
Do While Not tsLog.AtEndOfStream
LineInFile = tsLog.ReadLine
LineAll = LineAll & LineInFile & vbCRLF
Loop
'LineAll - текст с сохранением перевода строки
'Копирование текста в буфер обмена
WSHShell.Run "mshta.exe ""javascript:clipboardData.setData('text','" & LineAll & "');close();""", 2 »
Подскажите, пожалуйста, что надо изменить чтобы копировало в буфер содержимое любого отправленного на этот VBS файла, а не только Serial.txt как тут указано?

Iska
17-05-2017, 22:06
Option Explicit

Dim strSourceFile
Dim strContent


If WScript.Arguments.Count = 1 Then
strSourceFile = WScript.Arguments.Item(0)

With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
With .OpenTextFile(strSourceFile)
strContent = Replace(.ReadAll(), "\", "\\")
.Close
End With

WScript.CreateObject("WScript.Shell").Run """mshta.exe"" ""javascript:clipboardData.setData('text','" & strContent & "');close();""", 0, True
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 2
End If
End With
Else
WScript.Echo "Usage: wscript.exe """ & WScript.ScriptName & """ <Source file>"
WScript.Quit 1
End If

WScript.Quit 0




© OSzone.net 2001-2012