Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Получить HTML данные из буфера (число прочтений - 7950 )
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Получить HTML данные из буфера
11. Марта 2014 :: 16:47
Печать  
Возникла задача получить данные из буфера обмена в виде HTML кода. Например, при копировании в буфер таблицы из Outlook.

Попробовал использовать код отсюда: http://www.forum.mista.ru/topic.php?id=508248

Но возращает все время пустую строку. Что первый, что второй код.

Может какие-то ограничения по правам имеются для эксплорера по работе с буфером?
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #1 - 11. Марта 2014 :: 17:53
Печать  
Пока обнаружилось то, что код не работает при запуске из удаленного (терминального) приложения. Не в терминале, как сессии. А именно в приложении. Так, у нас Тотал запускается как удаленное прилолжение. И вот в нем-то и не работает код.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #2 - 12. Марта 2014 :: 14:51
Печать  
Засада еще в том, что метод getData не умеет считывать из буфера HTML версию буфера. Только text и url....
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Получить HTML данные из буфера
Ответ #3 - 13. Марта 2014 :: 07:06
Печать  
А сопоставление буферов обмена то хоть включено ?..
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #4 - 13. Марта 2014 :: 15:39
Печать  
В терминале? Да. Конечно. В любое другое место текст вставляется.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
selesta
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 26. Июня 2012
Re: Получить HTML данные из буфера
Ответ #5 - 25. Марта 2014 :: 07:19
Печать  
пример можеш сделать, немогу понять что не получается
я через буфер (методом ИЕ) забираю в 1с целые масивы данных (ексель таблицы) вместо написание импорта методом создания объекта Ексель и чтения файла
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #6 - 27. Марта 2014 :: 13:35
Печать  
Как пример могу дать ссылку на утилитку "FreeClipboardViewer" http://freeclipboardviewer.com/windowsclipboard.html, которая показывает разные составляющие Буфера. Так вот, если скопировать в буфер данные с html страницы, в этой утилите появляется раздел "HTML формат". Вот до этого раздела я и хочу достучаться. Как вариант - попробовать вытащить эти данные через WinAPI.
  

FreeClipboardView.jpg ( 81 KB | Загрузки )
FreeClipboardView.jpg

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
selesta
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 26. Июня 2012
Re: Получить HTML данные из буфера
Ответ #7 - 08. Апреля 2014 :: 12:01
Печать  
копаться дальше некогда, к сожалению, но думаю нада смотреть в сторону метода GetClipboardData из user32.dll используя dynwrap
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #8 - 09. Апреля 2014 :: 14:14
Печать  
Вот вариант:

Код
Выбрать все
	WinAPI = СоздатьОбъект("DynamicWrapperX");
	WinAPI.Register("USER32.DLL", "OpenClipboard", "i=l", "r=l");    
	WinAPI.Register("USER32.DLL", "GetClipboardData", "i=l", "r=l");    
	WinAPI.Register("USER32.DLL", "CloseClipboard", "r=l");
	WinAPI.Register("KERNEL32.DLL", "GlobalLock", "i=l", "r=l");
	WinAPI.Register("KERNEL32.DLL", "GlobalUnlock", "i=l", "r=l");
        WinAPI.Register("KERNEL32.DLL", "GlobalSize", "i=l", "r=l");
	WinAPI.Register("USER32.DLL", "RegisterClipboardFormatA", "i=s", "r=l");

	WinAPI.OpenClipboard(0);

	CF_TEXT = 1;
	CF_BITMAP = 2;
	CF_METAFILEPICT = 3;
	CF_SYLK = 4;
	CF_DIF = 5;
	CF_TIFF = 6;
	CF_OEMTEXT = 7;
	CF_DIB = 8;
	CF_PALETTE = 9;
	CF_PENDATA = 10;
	CF_RIFF = 11;
	CF_WAVE = 12 ;
	CF_UNICODETEXT = 13;
	CF_ENHMETAFILE = 14;
	CF_HDROP = 15;
	CF_LOCALE = 16;
	CF_MAX = 17;

//	Для Ст=1 По 17 Цикл
//		hClipMemory =  WinAPI.GetClipboardData(Ст);
//		lSize = WinAPI.GlobalSize(hClipMemory);
//		Сообщить(Строка(Ст)+"  " + Строка(lSize));
//	КонецЦикла;
	//wFormat=7;
	wFormat = WinAPI.RegisterClipboardFormatA("HTML Format"); //Rich Text Format
	Дескриптор = WinAPI.GetClipboardData(wFormat);
	lSize = WinAPI.GlobalSize(Дескриптор);
	Сообщить("Размер содержимого в HTML Format :: " + Строка(lSize));

	Если Дескриптор <> 0 Тогда
		Указатель = WinAPI.GlobalLock(Дескриптор);
		Результат = WinAPI.StrGet(Указатель, "s");
		WinAPI.GlobalUnlock(Дескриптор);
	Иначе
		Результат = "";
	КонецЕсли;
	WinAPI.CloseClipboard();
	Сообщить("Результат = "+Результат);
 

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #9 - 11. Апреля 2014 :: 12:59
Печать  
Всё бы хорошо, но вот содержимое для HTML Format вставляется по умолчанию в кодировке charset=utf-8. И, естественно, получить это значение в 1С в нормально виде не получается.... Печаль.....
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #10 - 11. Апреля 2014 :: 16:31
Печать  
alyuev писал(а) 11. Апреля 2014 :: 12:59:
Всё бы хорошо, но вот содержимое для HTML Format вставляется по умолчанию в кодировке charset=utf-8. И, естественно, получить это значение в 1С в нормально виде не получается.... Печаль.....

а в чем проблема? что не получается?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #11 - 13. Апреля 2014 :: 08:32
Печать  
Не получается прочитать данные из буфера в формате utf-8 в 1С. Русский текст получается в абракадабре.

Просто когда нажимаю Ctrl+C в Outlook (что-то хочу скопировать в буфер), то он вставляет значение в буфер HTML Format в кодировке UTF-8. И соответственно вычитать это значение из буфера в 1С в нормальном виде не получается.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #12 - 14. Апреля 2014 :: 07:04
Печать  
Ну так ты сам говоришь WinAPI, что читать строку надо как ANSI (1251):

WinAPI.StrGet(Указатель, "s");

Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #13 - 14. Апреля 2014 :: 08:03
Печать  
Вот что получаю, когда читаю в ANSI ".... mso-bidi-font-weight:bold'>КонтЛицаМенеджерТелефоны</span>...... "   (на самом деле у меня вместо К - PSPё - см. в скриншоте)

А если прочитать так, WinAPI.StrGet(Указатель) , то ответ выглядит так: "???????????????????????????????????????????????????????????????????????"
  

ANSI.jpg ( 22 KB | Загрузки )
ANSI.jpg

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Получить HTML данные из буфера
Ответ #14 - 14. Апреля 2014 :: 09:28
Печать  
Код
Выбрать все
	Сообщить("Результат = "+Результат);

	BinData = СоздатьОбъект("BinaryData");
	BinData.Кодировка = 0;
	BinData.ЗаписатьСтроку(Результат,1);
	Рез = ""; Стр = "";
	BinData.Кодировка = 3;
	BinData.Перейти(0,0);
	Пока BinData.ПрочитатьСтроку(Стр,0) = 1 Цикл
		Рез=Рез+Стр+РазделительСтрок;
	КонецЦикла;
	Сообщить("Результат = "+СокрЛП(Рез));
	BinData.Close();
 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать