Работа с буфером обмена на VBS
Перерыл все справочники по VBS и нигде не нашёл команд по работе с буфером обмена. В частности интересует, как скопировать текст в буфер обмена?
|
Petya V4sechkin |
08-09-2011 07:22 1748508 |
|
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
|
Цитата:
Цитата SendMessage
Аналогичным методом копировать в буфер не получилось у меня. Или тяму не хватило, или не поддерживается. »
|
Ранее поддерживался. С какого-то момента такую возможность прикрыли. Равно и «HTMLFile…GetData()» тоже может не срабатывать.
|
И в довершении темы, как прочитать текст из буфера?
|
Уже смотрел, вся проблема в раздражающий надписи Internet Explorer-а. Как прочитать текст из буфера, используя mshta.exe или другим способом?
|
И ещё один вопрос, как скопировать в буфер текст с сохранением перевода строки? То есть читаю файл:
Код:
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
Но это чревато ошибками, как сразу можно заметить.
|
Цитата:
Цитата SendMessage
Но это чревато ошибками, как сразу можно заметить. »
|
Спасибо, сработало на ура. А какие возможны ошибки?
Ещё нужно сказать, дополняя метод SendMessage, использование "mshta.exe" занимает некоторое время. Поэтому после этой команды в скрипте желательно поставить небольшую паузу, если данные буфера обмена требуется использовать незамедлительно.
|
' 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
|
Цитата:
Цитата 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 как тут указано?
|
Код:
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.
© OSzone.net 2001-