Скриншот - в jpg-файл через буфер обмена

Программирование на Visual Basic for Applications
akm-2005
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 04.03.2016 (Пт) 11:05

Скриншот - в jpg-файл через буфер обмена

Сообщение akm-2005 » 19.09.2019 (Чт) 12:08

Всем привет! Прошу помощи в решении проблемы скриншотирования стороннего окна в jpg-файл.

Делаю так:
1) с помощью CreateDC, CreateCompatibleDC, CreateCompatibleBitmap, SelectObject, BitBlt, OpenClipboard, EmptyClipboard, SetClipboardData - засовываю скриншот в буфер обмена
2) с помощью GetClipboardData, CopyImage, OleCreatePictureIndirect - создаю объект IPicture
3) с помощью SavePicture - сохраняю объект IPicture в файл (и заканчиваю - CloseClipboard, DeleteDC, ReleaseDC)

Как следствие - получаю файл формата bmp (даже если расширением указываю jpg), естесственно - большого размера. А мне бы - jpg (размером раз в 30 меньше).

Параметры для OleCreatePictureIndirect использую такие:
Код: Выделить всё
With uPicInfo
    .Size = Len(uPicInfo)
    .Type = 1       ' (PICTYPE_BITMAP).
    .hPic = hCopy   
    .hPal = 0       
End With

With IID_IDispatch
    .Data1 = &H20400
    .Data4(0) = &HC0
    .Data4(7) = &H46
End With

Просьба - подскажите пжст, есть ли (и если есть - какой) вариант сохранения скриншота через буфер обмена в файл формата jpg, а не bmp?

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Скриншот - в jpg-файл через буфер обмена

Сообщение The trick » 19.09.2019 (Чт) 13:48

UA6527P

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: Скриншот - в jpg-файл через буфер обмена

Сообщение bon818 » 20.09.2019 (Пт) 2:15

Есть класс для работы с JPEG написанный на vb6
поищите : vb6 JPEGclass.ByteJPEG

akm-2005
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Скриншот - в jpg-файл через буфер обмена

Сообщение akm-2005 » 25.09.2019 (Ср) 8:18

The trick писал(а):http://www.cyberforum.ru/visual-basic/thread911707.html
Спасибо, получилось.

Возможно, эту тему нужно поднимать не здесь... Но: скриншотирую полнооткрытую страницу IE с открытым всплывающим-из-трея-окном-календаря/времени (win7)...
Толкаю его на всплытие с помощью
Код: Выделить всё
SetCursorPos + mouse_event (MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

Все получается, вот только момент всплытия этого всплывающего окна не могу отследить достоверно ДО скриншотирования (то есть без работы с точками скриншота)...
Делаю паузу в секунду... Но бывают непредвиденные задержки... Да и время - дорого.)))
Поискав (в инете и через spy++), понял (хотя мог и ошибиться), что это всплывающее окно календаря/времени - та еще штучка, так просто не вызывается и не отслеживается...

В общем, вопрос: кто-то знает, как можно отследить всплытие этого окна без скриншотирования экрана?


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 11

    TopList