IE2017

Сохранение текста и картинок(скриншотов) в файл из буфера обмена

Программирование - Внешние компоненты

Внешняя компонента для сохранение содержимого буфера обмена в файлы во временном каталоге, и возвращении пути к файлу в 1С.

Возникла необходимость сохранять данные из буфера обмена в текст или картинку в зависимости от содержимого. 
Что бы потом прикреплять к объектам в 1С.
Находил разные компоненты, которые либо только текст либо только картинку сохраняют.
Написал свою.
Написано на C# поэтому требуется Microsoft .NET Framework 4
Шаблон компоненты на С# взят у  Kuzja_R за что ему респект.


Пока все просто, инициализируем компоненту, и вызываем функцию сохранения.
Файл сохраняется во временном каталоге системы, имя файла случайно генерится.
Можно передать свое имя файла(только имя файла без пути и расширения)
Картинка сохраняется в png.
Если в буфер скопирован сложный объект, например текст и картинки.
То сохраняется только текст.

В планах:

  • Сохранить письма Ms Outlook в файл msg
  • Ждать предложений от Вас.


Установка:

  1. Устанавливаем Framework 4
  2. Библиотеку и батник копируем в Windows /System32 (либо в другое место, тогда в батнике пути поменять)
  3. Запускаем батник под админом.



Использование:
(пример обработку с управляемой формой приложил)
В ней несколько функций с небольшими комментариями.


Работа простая(далее пример без попыток и исключений, в обработке все как надо)

ПодключитьВнешнююКомпоненту("AddIn.ClipBoardToFile") 
Компонента = Новый("AddIn.ClipBoardToFile");
ИмяФайла="СкринШот_123"
Результат=Компонента.SaveClipBoardToFile(ИмяФайла);


Жду вопросов и предложений.

UPD(13.08.2014)
Кто хочет потестить бесплатно(не за 1-у монету:) повышайте мне рейтинг:) и пишите в личку, скину на мыло.

PS Сейчас работаю над вытаскиванием всех картинок из буфера.
Для файлов MS Office решаемо, для остальных вариантов разбираюсь.
(Если у кого есть опыт , буду рад помощи, т.к. информации в инете ноль.)
Как будет все причесано, исходники выложу, но за 10 монет :)


UPD2(15.08.2014)
Новая функция SaveClipBoardToFileArray
Возвращает COMSafeArray содержащий массив строк с файлами.
Если пустой, значит ошибка и смотрим в свойстве компоненты LastError

Функция универсальная.
Работает как с простым копирование текста или картинки, так и с выделением большого количества объектов.
Проверено на приложениях MS Office и веб страницах
Например если выделить область или весь лист в MS EXCEL или MS Word
То будет несколько файлов, один со всем текстом, остальные с картинками.
При этом все объекты, такие как диаграммы, графики и т.д., будут пребразованы в картинки.
(Объекты кстати также можно по отдельности копировать и сохранять функцией SaveClipBoardToPicture,либо скопировать)
Так же эта функция возвращает список файлов скопированных в проводнике.
Так же при выделении области в инет браузере, будут скачены все картинки и будет сохранено несколько файлов , один с текстом и со всеми скаченными картинками.
По другим видам объектов при копировании в буфер, если у скопированного объекта нет формата HTML,
то будет сохранены два файла, текст и картинка со всем выделенным объектом.
Если же есть только текст то будет только текст
Если же есть только картинка то будет сохранена картинка с выделенной областью объекта.
Например в MS PowerPoint при выделении слайда, будет сохранена одна картинка в виде всего слайда(к сожалению только без фона)

UPD3(20.04.2017) не прошло и 100 лет:)

Функция SaveClipBoardToFileArray, при выделении эксель, теперь выделенную область таблицы сохраняет не в текст, а в Xlsx. Если на компьютере не установлен Excel, сохранит в формате xml.

Установка

Для 32 разрядной машины кладем в папку system32 для 64 разрядной в паку SysWOW64.Запускаем соответсвтующий батник для регистрации(от имени админа)

Скачать файлы

Наименование Файл Версия Размер
Сохранение текста и картинок(скриншотов) в файл из буфера обмена:
.7z 13,06Kb
21.04.17
2
.7z 13,06Kb 2 Скачать

См. также

Комментарии
1. Armando Armando (Armando) 1376 11.08.14 23:49 Сейчас в теме
По технологии native тож самое можешь?
2. Алексей Главизнин (realchel) 6 12.08.14 01:23 Сейчас в теме
Это вряд ли.
Я взял готовый шаблон на С#
добавил только свой функционал.
Если будет шаблон, то функционал добавить не проблема.
3. Алексей Ситников (SiAl) 70 12.08.14 17:47 Сейчас в теме
Не проще было скачать и установить AutoIt и использовать его COM-сервер - AutoItX?
4. Алексей Главизнин (realchel) 6 12.08.14 23:09 Сейчас в теме
(3) SiAl,
Ни один нормальный сисадмин не поставит на компы пользователей AutoIt.
5. Андрей Акулов (DrAku1a) 1204 13.08.14 03:15 Сейчас в теме
(1) Чего там мочь то ))
А вот сделать бы такую операцию без ВК......
6. Алексей Главизнин (realchel) 6 13.08.14 11:35 Сейчас в теме
(5) DrAku1a,
Про чего там мочь это ты про Натив пишешь или в целом про работу с буфером
Если про натив подскажи как это в C# сделать , может пример или шаблон есть.

7. Алексей Ситников (SiAl) 70 13.08.14 13:28 Сейчас в теме
(4) realchel, ну с таким успехом из винды пусть "нормальный админ" и Windows Scripting Host выпиливает.
8. Алексей Главизнин (realchel) 6 13.08.14 17:16 Сейчас в теме
(7) SiAl,
Не надо путать теплое с мягким и круглое с белым:) Это софт разного уровня.

Поискав скрипты на AutoIt которые бы сохраняли картинки в файл, не нашел.
Не нашел и как получить содержание буфера(хотя бы определить что там картинка или текст)
Уверен что даже если что то подобное есть в COM сервере, то использование его со стороны не ограничится вызовом одной функции.
Кроме того уверен, что AutoIt не распарсит буфер обмена скопированный с ворда или эксель и не раскидает это по файлам.
Можете либо предоставить пример!?
Либо прекратить переписку, в связи с несостоятельностью доводов в пользу autoit

9. Armando Armando (Armando) 1376 13.08.14 22:01 Сейчас в теме
(5) DrAku1a,
Чего там мочь то ))

Почему-то до сих пор никто не сделал. Я бы скачал, ибо есть где применить.

А вот сделать бы такую операцию без ВК......

У меня что-то похожее есть, но только для картинок
http://infostart.ru/public/280083/
10. Алексей Главизнин (realchel) 6 15.08.14 00:13 Сейчас в теме
(9) Armando,
В твоем примере, не вижу преимущества внешнего консольного приложения перед ВК
Только разве что использовать в командной строке и там где DLL нельзя подключить
11. Armando Armando (Armando) 1376 15.08.14 22:16 Сейчас в теме
(10) realchel, я про преимущество ничего не сказал. Мне самому это не нравится. Поэтому и спрашиваю про нативную ВК. Мне надо чтоб можно было работать с файлами и картинками.
12. Алексей Главизнин (realchel) 6 16.08.14 01:51 Сейчас в теме
(11) Armando,
Будет шаблон, будет пища:)
13. Armando Armando (Armando) 1376 16.08.14 14:04 Сейчас в теме
14. Яков Коган (Yashazz) 2095 19.08.14 00:17 Сейчас в теме
Ищите и да обрящете, ибо это было на ИС, было и в нативном исполнении, если не ошибаюсь. Поручик, вроде бы, делал.
Оставьте свое сообщение