Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Работа с буфером обмена на VBS (http://forum.oszone.net/showthread.php?t=215086)

BigBoo 08-09-2011 02:28 1748485

Работа с буфером обмена на VBS
 
Перерыл все справочники по VBS и нигде не нашёл команд по работе с буфером обмена. В частности интересует, как скопировать текст в буфер обмена?

Petya V4sechkin 08-09-2011 07:22 1748508

Работа с буфером обмена (clipboard) в скриптовых языках JScript или VBScript

BigBoo 08-09-2011 11:16 1748648

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

SendMessage 08-09-2011 16:14 1748865

Получение текста из буфера:
Код:

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 1748984

Цитата:

Цитата SendMessage
Аналогичным методом копировать в буфер не получилось у меня. Или тяму не хватило, или не поддерживается. »

Ранее поддерживался. С какого-то момента такую возможность прикрыли. Равно и «HTMLFile…GetData()» тоже может не срабатывать.

BigBoo 09-09-2011 12:58 1749564

И в довершении темы, как прочитать текст из буфера?

Iska 09-09-2011 13:34 1749585

BigBoo, см. выше:

BigBoo 09-09-2011 16:15 1749728

Цитата:

Цитата Iska
см. выше: »

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

BigBoo 09-09-2011 16:30 1749745

И ещё один вопрос, как скопировать в буфер текст с сохранением перевода строки? То есть читаю файл:
Код:

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 1749755

Цитата:

Цитата BigBoo
Как прочитать текст из буфера, используя 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

Цитата:

Цитата BigBoo
как скопировать в буфер текст с сохранением перевода строки? »

Код:

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 1749785

Цитата:

Цитата SendMessage
Но это чревато ошибками, как сразу можно заметить. »

Спасибо, сработало на ура. А какие возможны ошибки?

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

testot 07-08-2012 16:40 1966298

' 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 2220746

Цитата:

Цитата BigBoo
после этой команды в скрипте желательно поставить небольшую паузу, если данные буфера обмена требуется использовать незамедлительно. »

Можно вызвать метод Run с аргументом <WaitOnReturn> = True для ожидания выполнения команды.
Код
Цитата:

Цитата testot
... wsh.Run "cmd.exe /C <nul set /p ""="&dataclip &""" | CLIP", False ...»

изменить вот так:
Код:

wsh.Run "cmd.exe /C <nul set /p ""="&dataclip &""" | CLIP", 0, True
Код
Цитата:

Цитата SendMessage
Код:

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 2737608

Цитата:

Цитата BigBoo
И ещё один вопрос, как скопировать в буфер текст с сохранением перевода строки? То есть читаю файл:

Код:

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 2737647

Код:

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



Время: 18:35.

Время: 18:35.
© OSzone.net 2001-