Доступ к тексту в буфере обмена в vba/vbs

Попросили помочь со скриптами vbs. Благодаря криворукости разработчиков специфическому поведению SAP, решением проблемы было использование буфера обмена. С чтением содержимого всё просто, а вот с записью уже не так тривиально. Причём, сторонний софт туда не скопировать и не скомпилировать - огорожено. Так что пользуют "васик".


Вобщем, нарыл вот такое. Кому надо, пользуйтесь:


Функция:

Function ClipBoard(input)
If IsNull(input) Then
ClipBoard = CreateObject("HTMLFile").parentWindow.clipboardData.getData("Text")
If IsNull(ClipBoard) Then ClipBoard = ""
Else
CreateObject("WScript.Shell").Run "mshta.exe javascript:eval(""document.parentWindow.clipboardData.setData('text','" & Replace(Replace(Replace(input, "'", "\\u0027"), """","\\u0022"),Chr(13),"\\r\\n") & "');window.close()"")", 0,True
End If
End Function

Использование:


Получение текста:

result = ClipBoard(null)

Установка текста:

ClipBoard("новый текст")

Если установка не нужна, можно функцию не использовать, хватит простой строки:

result = CreateObject("HTMLFile").parentWindow.clipboardData.getData("Text")

Для установки через setData такой способ не подходит (М$ пофиксили возможность зачем-то), посему приходится извращаться с помощью HTA.

MS, Libreoffice & Google docs

719 постов15K подписчика

Добавить пост

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Для установки через setData такой способ не подходит (М$ пофиксили возможность зачем-то), посему приходится извращаться с помощью HTA.

через cmd уже не модно или прав не хватает?

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run "cmd.exe /c echo hello world | clip", 0, TRUE


Dim string

String = "text here" &chr(13)& "more text here"

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run "cmd.exe /c echo " & String & " | clip", 0, TRUE


раскрыть ветку (4)
Автор поста оценил этот комментарий

Не пашет.

1
DELETED
Автор поста оценил этот комментарий

я не специалист, но cmd выполняется асинхронно, а это может быть критично для выполнения программы

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

WshShell.Run

задан 3й параметр (bWaitOnReturn)

пока командный интерпретатор не завершит выполнение - вызвавшая его программа будет терпеливо ждать завершения...


я не специалист

Именно поэтому был ОБЯЗАН подгуглить, а не фантазировать :)

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

я никому здесь ничего не обязан. А за уточнение спасибо, вот и гуглить не пришлось

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку