Может «прослушивать»: любые изменения буфера обмена; нажатие клавиш соответствующих вставке (paste); нажатие клавиш копирования (copy); drop операции.
Это новая реализация аналогичной компоненты https://infostart.ru/public/379695/, но теперь не C#, а С++ нативно для x32 / x64.
(см. http://youtu.be/-PaWWFfbYo4)
Описание компоненты «Менеджер буфера обмена».
Основное назначение – добавить для приложения 1С возможность получения информации из почтовых вложений или файлов с других рабочих столов (RDP) с помощью операций копирования/вставки.
Помимо этого, компонента может «прослушивать»:
- любые изменения буфера обмена;
- нажатие клавиш соответствующих вставке (paste) из буфера обмена;
- нажатие клавиш копирования (copy);
- drop операции.
Параметры компоненты:
- Только для Windows (32 и 64);
- Нативная (C++). Не требует регистрации в реестре;
- Исполняемые файлы BwwLib32.dll и BwwLib64.dll;
- Подключение "AddIn.BwwLib.ClipboardManager";
- Протестировано на ОS Win 10 и Win 2012 сервер. Платформы 1С 8.3.10 и 8.3.14;
Подробное описание методов и событий компоненты дано в файле «Форматы, методы и события компоненты.xlsх”
Использование методов компоненты продемонстрировано в расширении «МенеджерБуфераОбмена.cfe»
В расширении всего одна одноименная обработка. Упаковка ее в расширение сделана только для того, что бы максимально сохранить исходный вид. Если внедрять ее (обработку) в другие конфигурации напрямую (без расширения), то «слетают» картинки.
DLL файлы компоненты сохранены в общих макетах расширения «BwwLib32» и «BwwLib64» и в макетах обработки.
Работа с компонентой реализована полностью асинхронно.
Порядок подключения расширения к Вашей конфигурации см. ниже.
Недостатки компоненты.
При разработке компоненты, помимо работы с буфером обмена, была предпринята попытка расширить возможности 1С по использованию drag-drop операций (например, получить почтовые вложения перетаскиванием).
В качестве слушателя drop операций был использован класс IDropTarget, с помощью которого замечательно выполняется перехват, НО!!!
- при подключении слушателя компоненты к активному окну 1С отключается штатный drop слушатель приложения;
- он не восстанавливается после отключения ВК или закрытия/открытия окна формы обработки. Для восстановления требуется перезапуск приложения 1С!
Основная причина – «прослушка» устанавливается на главное окно приложения! Если бы «прослушка» включалась для конкретного поля/control-а формы, то все было бы Ок. Но в «тонком» клиенте их вообще «не видно» (в «толстом» определить control-ы возможно, хотя и проблематично). Т.е. имеем основное окно приложения 1С (типа фрейма), а в нем HTML control-ы, которые уже не win-окна, а что-то типа WebView класса. Может быть кто-то уже занимался этим? Было бы интересно…
Таким образом, использование возможности ВК по прослушиванию drop операций не рекомендуются!
Порядок подключения расширения к конфигурации на примере ERP 2.0
1. Создаем в конфигурации ERP новое расширение. Рисунок № 1.
2. Загружаем в расширение файл “Менеджер буфера обмена.cfe”. Рисунок № 2.
3. Синхронизируем роли и совместимость расширения и конфигурации. Рисунок № 3.
4. Добавили в расширение основную роль конфигурации. Рисунок № 4. Если расширение встраивается в чистую конфигурацию, то этот пункт можно пропустить
>> в «толстом» определить control-ы возможно, хотя и проблематично
Это в какой версии платформы? На платформе 8.3.14 контролы в обычных окнах тоже не виндовые.
Имел в виду 8.3.10.
С какой конкретно версии прошли изменения — не знаю.
Добрый день.
Не понял по методам.
Копирую файл на RDP. Вижу что он отображается в галерее файлов и изображений.
Как мне получить сам файл в 1С? Можно ли его скопировать во временную папку?.
Конечно можно
Весь код сосредоточен в обработке расширения «Bww_МенеджерБуфераОбмена»
Код несколько «запудренный», т.к. используются асинхронные методы вызова, где каждый метод (действие) разбит на два этапа – начало и завершение (смотри процедуры «ВызовМетодаКомпоненты_Начало» и «ВызовМетодаКомпоненты_Завершение». Именно в них отрабатываются все методы) Если не используешь УФ (ассинхронность), то все очень упрощается.
Тем не менее, предположим что УФ и ты используешь следующий сценарий:
• Запустил 1С на RDP машине.
• Включил обработку, выполнил подключение к компоненте и включил «ухо»
o В этот момент сработал метод включения прослушивателя буфера обмена «ListenerOn«. См. вышеописанные процедуры.
o Т.е. теперь Dll-ка смотрит за изменением буфера обмена;
• Когда ты скопировал файл(ы) на локальной машине
o Dll-ка сообщила о изменении в буфере обмена через процедуру «ВнешнееСобытие» Событие = «CHANGE CLIPBOARD». После чего включился метод определения содержимого буфера «DefineContentFormats«;
o В этом методе Dll-ка просматривает в буфере наличие форматов
Если Результат = «TEXT» Тогда
ВызовМетодаКомпоненты_Начало(«GetText»);
ИначеЕсли Результат = «TEXT|BITMAP» Тогда
ВызовМетодаКомпоненты_Начало(«GetText»);
ВызовМетодаКомпоненты_Начало(«GetPictureFile»);
ИначеЕсли Результат = «BITMAP» Тогда
ВызовМетодаКомпоненты_Начало(«GetPictureFile»);
ИначеЕсли Результат = «DROPFILES» ИЛИ
Результат = «CONTENTFILES» Тогда
ВызовМетодаКомпоненты_Начало(«GetFilesCount»);
КонецЕсли;
В твоем случае будет формат = «CONTENTFILES» и обработка вызовет метод «GetFilesCount«, а затем «GetFileInformation«, в которых будет заполнена таблица с инфой об файлах
В случае CONTENTFILES файлов их полное имя (путь к ним) не известны, т.к. это не локальный DROP, а перекидывание буфера на RDP машину.
Чтобы получить путь к файлу нужно вызвать метод «GetFilePath«, который принудительно запишет файл в temp папку пользователя на RDP машине и вернет путь к нему (полное имя файла).
Т.е. передаем в метод GetFilePath краткое имя файла, , а получаем полное.
А в веб-клиенте будет работать?
(5)
Спасибо. Буду пробовать.
А если не используются УФ какой алгоритм?
«…если не используются УФ какой алгоритм?»
Алгоритм тот же, но без разделения на процедуры «ВызовМетодаКомпоненты_Начало» и «ВызовМетодаКомпоненты_Завершение»,
т.е. в одной процедуре можно сразу вызвать все методы
DefineContentFormats;
GetFilesCount
GetFileInformation
«…в веб-клиенте будет работать?»
Попробую и отпишусь
Добрый день.
При запуске 1С на локальной машине все нормально.
Но если я запускаю 1с через RDP, то при вызове метода GetFilePath возвращает неопределено.
Компонента при этом подключается и методы GetFilesCount и GetFileInformation отрабатывают корректно.
В чем может быть причина?
(10)
Заработало и через RDP.
Прекрасная компонента, очень экономит время при подключении файлов к 1с.
ОК!
А то я уже сделал проверочную обработку для обычных форм
В ней все предельно просто и понятно. См. основную процедуру «ОбновитьТаблицуФайлов»
У меня все работает
(6) Текущая версия точно нет!
Создавать новую, с возможностью WEB подключения, пока не предусматривается
(14) Эх, жаль.