Доступ к тексту в буфере обмена в 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

715 постов15K подписчиков

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

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

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

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

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

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

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


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

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

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий
Безопасность по шапке не даст?)
Какую задачу-то решаете?
раскрыть ветку (10)
1
Автор поста оценил этот комментарий
Безопасность по шапке не даст?)

vbs официально можно. А вот autoIt уже нельзя)


Какую задачу-то решаете?

Там форма открывается по рандомным координатам с фокусом на рандомном элементе управления, причём форма модальная и доступа к ней через апи SAPа изнутри нет. Поэтому навигация только через SendKeys "вслепую". В единственный textedit (там ещё списки и куча кнопок) нужно вставить текст и нажать кнопку. Вся эта хрень нужна чтобы определить, где сейчас фокус ввода: скрипт пытается ввести заранее установленный текст (больше его, слава Ктулху, ввести некуда), потом копирует в буфер содержимое и сверяет с введённым. Если совпало - значит фокус там где надо. Установка буфера нужна для многократного запуска. Без неё можно было бы обойтись, например, использованием текущего времени в качестве шаблона, но мне было просто интересно возможно ли это в принципе. А так-то, vbs вообще не мой профиль, просто помочь попросили.

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

Как шутят сами сотрудники, "кто работал в SAP, тот в цирке не смеётся".

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

цитата забавная. но по сути неверная. надо "кто не читал документацию и пытался работать"

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

Не берусь оценивать уровень компетенции сотрудников, поскольку сам там не работаю.

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

А что за транзакция, и какой должен быть результат?

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

Фиг его знает что за транзакция, даже не хочу вникать в эту муть, работает и хорошо. Окно модальное при сохранении/экспорте. Судя по тому, что оно визуально отличается от окон в других транзакциях - какой-то результат "творчества" их айтишников.

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

вы вместо нормального экспорта на абапе прикручиваете к одному костылю другой, а виноват сап :)

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

У пользователей, и соответственно у меня, нет доступа к abap'у, автоматизация только через vbs. Что дали, с тем и работают. Понятно, что не разработчики сап, а внедренцы или собственные программеры сделали такое говно окно, к которому нет нормального доступа. Это извращение с буфером появилось не от хорошей жизни.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий
У пользователей ... нет доступа к abap'у
и слава богу
ЗЫ но мне нравятся такие конторы. покупают систему с ценником вместе с железом в несколько лямоевров, и жмутся на найм и обучение нормальных специалистов.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну так они ж не для работы его покупают, а для имиджа и капитализации холдинга, чтобы "как у всех чотких пацанов". Лет пятнадцать назад со стороны наблюдал, как в одном из подразделений Лукойла сап внедряли вместо 1с (в принципе их всё устраивало, но в москве решили, что нет). Бухгалтера через полгода внедрения волосы на жопе рвали, когда увидели, как у них основные средства начали рандомно троиться, а ответственные внедренцы свалили в отпуск.

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