Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Получить HTML данные из буфера (число прочтений - 8954 )
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #15 - 14. Апреля 2014 :: 09:52
Печать  
Ещё варианты:
  • ADODB.Stream
    Код
    Выбрать все
    Стрим = Новый COMОбъект("ADODB.Stream");
    Стрим.Mode     = 3;
    Стрим.Type     = 2;
    Стрим.Charset  = "windows-1251";
    Стрим.Open();
    Стрим.WriteText(Строка1251, 0);
    Стрим.position = 0;
    Стрим.Charset  = "utf-8";
    СтрокаUTF8 = Стрим.ReadText(-1);
    Стрим.Close();
     
    
    
  • 1Cv8, входной параметр - COMSafeArray беззнаковых байтов
    Код
    Выбрать все
    Функция Раскодировать(m)
    	м = m.Выгрузить();
    
    	s = "";
    	For I = 0 To м.ВГраница() Do
    		c = м[I];
    		If Int(c / 8) = 30 Then // 4-byte
    			I = I + 3;
    			c = (c %  8) * 262144 + (м[I - 2] % 64) * 4096 + (м[I - 1] % 64) * 64 + м[I] % 64;
    		ElsIf Int(c / 16) = 14 Then // 3-byte
    			I = I + 2;
    			c = (c % 16) * 4096 + (м[I - 1] % 64) * 64 + м[I] % 64;
    		ElsIf Int(c / 32) = 6 Then // 2-byte
    			I = I + 1;
    			c = (c % 32) * 64 + м[I] % 64;
    		ElsIf c = 0 Then
    			Break;
    		EndIf;
    		s = s + Char(c);
    	EndDo;
    
    	Return s;
    КонецФункции 
    
    


Улыбка
  

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


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

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Получить HTML данные из буфера
Ответ #16 - 14. Апреля 2014 :: 10:44
Печать  
leov-001, Спасибо!

получилось!
  

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


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

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

Код
Выбрать все
Функция ВзятьИзБуфера(ТипБуфера="",ПерекодироватьвWin1251=0,ВывестиИменаБуферов=0)
//Стандартные форматы для ТипБуфера можно посмотреть здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms649013(v=vs.85).aspx
//Другие (именованные) форматы можно подсмотреть в программе http://freeclipboardviewer.com/
	Перем оЕстьВБуфере,Рез,BinData;
	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.Register("USER32.DLL", "EnumClipboardFormats"	, "i=l"	, "r=l");
	WinAPI.Register("USER32.DLL", "GetClipboardFormatName"	, "i=lpl", "r=l");

	WinAPI.OpenClipboard(0);

	НомБуфера= WinAPI.EnumClipboardFormats(0);
	СтрБуф   = WinAPI.Space(256);
	pStr     = WinAPI.StrPtr(СтрБуф);
	ФорматЕстьВБуфере=0;
	Пока НомБуфера<>0 Цикл
		НомБуфера=WinAPI.EnumClipboardFormats(НомБуфера);
		Рез = WinAPI.GetClipboardFormatName(НомБуфера,pStr,256);
		Если Рез=0 Тогда Продолжить; КонецЕсли;
		ИмяЧтоЕстьВБуфере=WinAPI.StrGet(pStr,"s");
		Если ВывестиИменаБуферов=1 Тогда
			Сообщить(ИмяЧтоЕстьВБуфере);
		Иначе
			Если ТипБуфера=ИмяЧтоЕстьВБуфере Тогда
				ФорматЕстьВБуфере=1;Прервать;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Если ПустаяСтрока(ТипБуфера)=1 Тогда			  wFormat = 1;
	ИначеЕсли ТипЗначенияСтр(ТипБуфера)="Число" Тогда wFormat = ТипБуфера;
	Иначе											  wFormat = WinAPI.RegisterClipboardFormatA(ТипБуфера);
	КонецЕсли;
	Дескриптор  = WinAPI.GetClipboardData(wFormat);
	lSize 		= WinAPI.GlobalSize(Дескриптор);
	Если Дескриптор <> 0 Тогда
		Указатель = WinAPI.GlobalLock(Дескриптор);
		Результат = WinAPI.StrGet(Указатель,"s");
		WinAPI.GlobalUnlock(Дескриптор);
	Иначе
		Результат = "";
	КонецЕсли;
	WinAPI.CloseClipboard();
	Если ПерекодироватьвWin1251=1 Тогда
		BinData = СоздатьОбъект("BinaryData");
		BinData.Кодировка = 0;
		BinData.ЗаписатьСтроку(Результат,1);
		Результат = ""; Стр = "";
		BinData.Кодировка = 3;
		BinData.Перейти(0,0);
		Пока BinData.ПрочитатьСтроку(Стр,0) = 1 Цикл
			Результат=Результат+Стр+РазделительСтрок;
		КонецЦикла;
		BinData.Close();
	КонецЕсли;
	Возврат Результат;
КонецФункции
 

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать