Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2015, 11:20   #1
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию где находится кэшь WebBrowser?

Где находится кэшь WebBrowser куда он копирует изображения???
Вообще как сохранить изображения из WebBrowser?? Читал чтонужно через IHTMLControlRange.
Вот я создал указатель на него и что дальше?
Код:
CComQIPtr<IHTMLControlRange, &IID_IHTMLControlRange> pRange;
Нашел изображение которое находится в
Код:
IHTMLImgElement* pElem=NULL;
Смотрел код на делфи как там делают, там от такая строчка идет
Код:
imgRange.add((IHTMLControlElement)img);
IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();
foreach (IHTMLImgElement img in doc.images)
{
    imgRange.add((IHTMLControlElement)img);
    imgRange.execCommand("Copy", false, null);
...
...
...
первая строчка не ясно, ято там создается imgRange, а мне как создать?
Две остальные строчки тоже не ясно, метода add в интерфейсе IHTMLControlRange нету у меня, последняя тоже не ясно что, вроде как копирование.
Как это сделать на С++?

Последний раз редактировалось ninja2; 27.08.2015 в 11:42.
ninja2 вне форума Ответить с цитированием
Старый 27.08.2015, 12:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Где находится кэшь WebBrowser куда он копирует изображения???
На системном разделе в каталоге профиля пользователя. Но по-моему в разных виндах путь разнится. Уточняй какая винда.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2015, 12:31   #3
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На системном разделе в каталоге профиля пользователя. Но по-моему в разных виндах путь разнится. Уточняй какая винда.
Та у меня ИЕ11 стоит я глянул где кэшь находится, зашел туда, а там ниче нету, даже папка не создана
Показывает от где

Захожу в эту папку, там пусто

Когда по из окна "параметры данных вебсайта" то попадаю в папку и там есть кэшь

Фигня какае то, скрытые файлы в настройках показывает.

Так что мне кэшь прописать типо этот путь? А как узнать имя пользователя? А если кэшь будет в другой папке у пользователя? та это головняк. Нужно как то через интерфейс делать наверно, на Делфи через IHTMLControlRange сделано, через кэшь тоже код видел, на делфи там непонятно вообще. Нада как то путь получать из Windows.

Последний раз редактировалось ninja2; 27.08.2015 в 12:40.
ninja2 вне форума Ответить с цитированием
Старый 27.08.2015, 12:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Какого пользователя? Какой путь?
Зачем тебе кэш понадобился?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2015, 12:58   #5
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Какого пользователя? Какой путь?
Зачем тебе кэш понадобился?
Изображение которое загружается в браузер нужно сохранить на диске.
От так пробую, вылетает необработаное исключение
Код:
IHTMLElement* pElem=NULL;
		if(pDispOpt->QueryInterface(IID_IHTMLElement,(void**)&pElem)!=S_OK)
		{AfxMessageBox(L"Не удалось получить интерфейс pElem");exit(1);}
		TRACE("pElem\n");
		
		CComQIPtr<IHTMLControlRange, &IID_IHTMLControlRange> pRange;
		TRACE("One\n");
		if(pElem->QueryInterface(IID_IHTMLElement,(void**)&pRange)!=S_OK){AfxMessageBox(L"not pRange"); exit(1);}
		TRACE("Two\n");

		//на этой строке вылетает необработаное исключение
		pRange->execCommand(L"Copu",true,_variant_t("vall"),NULL);
В эту функцию данные на фанарь ввел, не ясно что за третий параметр и четвертый, в описании нету четвертого параметра

На фанарь появился как то метод add, тож вроде его небыло, щам мб. заработает.

Как сделать инициализацию этой переменной
Код:
CComQIPtr<IHTMLControlRange, &IID_IHTMLControlRange> pRange;

Последний раз редактировалось Stilet; 11.09.2015 в 06:54.
ninja2 вне форума Ответить с цитированием
Старый 27.08.2015, 13:35   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Copu
А это что за слово?
И каков текст исключения?
Цитата:
Как сделать инициализацию этой переменной
Ты ее инициализируешь через QueryInterface. Посмотри внимательнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2015, 14:05   #7
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А это что за слово?
И каков текст исключения?

Ты ее инициализируешь через QueryInterface. Посмотри внимательнее.
Да там не правильно интерфейс. Делаю так тоже не выходит
Код:
CComQIPtr<IHTMLControlRange, &IID_IHTMLControlRange> pRange;
		IHTMLElement* pBody=NULL;
		if(pDoc2->get_body(&pBody)!=S_OK){AfxMessageBox(L"not pBody");}
		BSTR text; pBody->get_innerHTML(&text);
		AfxMessageBox(text);
		if(pBody->QueryInterface(IID_IHTMLControlRange,(void**)&pRange)!=S_OK){AfxMessageBox(L"2not pRange"); exit(1);}
выводит что нету интерфейса. Да я не могу его получить вообще.

В делфи там так инициализацию делают
Код:
IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();
ninja2 вне форума Ответить с цитированием
Старый 27.08.2015, 14:42   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну а МСДН что говорит? Какие интерфейсы можно от Body отодрать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2015, 17:19   #9
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну а МСДН что говорит? Какие интерфейсы можно от Body отодрать?
Я не знаю где там читать, от что нашел, IHTMLDocument2
Там пару методов есть от интерфейса IHTMLControlRange, а сам интерфейс тут вроде для С# IHTMLControlRange

Я МСДН плохо знаю где там искать.
От нашел пример где в буфер добавляется изображение тут, ну оно с ошибкой, ну хоть что то , надо разобрать, хоть на С++.

Нада наверно на С# переходить, там все попроще и литературы полно =)

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну а МСДН что говорит? Какие интерфейсы можно от Body отодрать?
та короче разобрал код что на MCДН. зря я это все делал, он тупо в буфер ссылку добавляет.

Код:
BSTR bstrCommand = SysAllocString(L"Copy");
if(FAILED( pCtrlRange->execCommand(bstrCommand, VARIANT_FALSE, vEmpty, &vbReturn) ))
Ну и нафиг оно нада 50 строк кода писать чтобы ссылку добавить, я думал там что то происходит особое, а оно просто тупо в буфере ссылка на изображение попадает. ЕЕ проще получить через regex_search меньше кода в разы.
Ну есть ссылка на файл phg в буфере и как его теперь сохранить. Вторая часть не ясна

вот код на делфи
Код:
try
                    {
                        using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                        {
                            string name = img.nameProp;
                            if (name.IndexOf("image.php") > -1)
                            {
                                 name = "image.png";
                                 bmp.Save(name);
                             
 
                            }
                       
                        }
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show(error.ToString());
                    }
В буфере у нас тупо ссылка. ClipBoard это походу буфер в нем ссылка на изображение которое на сайте и что дальше создается из этой ссылки BITMAP, а потом в png переименовывается.

ниче не ясно как эту строчку на дефли сделать на С++???
Код:
Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap)
Вообще доступ к буферу не могу получить, как с него что то считать не ясно

Вообще похоже я что то не правильно делаю, наверно ж должно как то изображение скопироваться в буфер а не урл???

вообще попута, то все коды не на делфи а на с#

Последний раз редактировалось Stilet; 11.09.2015 в 06:54.
ninja2 вне форума Ответить с цитированием
Старый 28.08.2015, 19:11   #10
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
Вопрос

Цитата:
Изображение которое загружается в браузер нужно сохранить на диске.
От так пробую ...


Код:
Uses URLMon, GIFImage, PNGImage, JPEG;

Procedure TForm1.Button1Click(Sender: TObject);
Var V: OleVariant; URL, Ext, FileName: String;
Begin
WB.Navigate('yandex.ru');
While (WB.ReadyState<>READYSTATE_COMPLETE) Do // Or WB.Busy Do
      Application.ProcessMessages;
V:=WB.OleObject.Doc.All.Tags('img');
If VarIsEmpty(V) Or VarIsNull(V) Then Exit;
V:=V.Item(4);
If VarIsEmpty(V) Or VarIsNull(V) Then Exit;
URL:=V.getAttribute('src');
URL:=StringReplace(URL, 'https:', 'http:', [rfIgnoreCase]);
If Pos('http://', URL)=0 Then
      URL:=StringReplace(URL, '//', 'http://', [rfIgnoreCase]);
If Pos('http://', URL)=0 Then
      URL:='http:'+URL;
Ext:=ExtractFileExt(URL);
If (Ext='.bmp') Or (Ext='.gif') Or (Ext='.jpg') Or (Ext='.jpeg') Or (Ext='.png') Then
      Begin
      FileName:='tmp'+Ext;
      If URLDownloadToFile(Nil, PChar(URL), PChar(FileName), 0, Nil)=S_OK Then
            Image1.Picture.LoadFromFile(FileName);
      End;
End;
Не? Надо буфер обмена засорять?
ResourceSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где находится компонент TSystemTray? Winexcel Общие вопросы Delphi 12 12.11.2013 22:50
Где находится серийный номер windows xp kreiver Windows 8 06.03.2013 09:22
где находится TPageControl ВалекFCRK Общие вопросы Delphi 4 28.07.2011 23:05
Где находится компонент ТMailMessage? romanzi Работа с сетью в Delphi 0 21.11.2010 11:34
Получение пути где находится программа Lokos Общие вопросы Delphi 9 05.07.2010 19:00