Zireael |
Отправлено: 08 Мая, 2019 - 14:27:50
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Вывод миниатюры окна на диалог (Отобразить)CODE:#define DWM_TNP_RECTDESTINATION 1
#define DWM_TNP_RECTSOURCE 2
#define DWM_TNP_OPACITY 4
#define DWM_TNP_VISIBLE 8
#define DWM_TNP_SOURCECLIENTAREAONLY 16
external(INT, "DwmRegisterThumbnail", "DwmRegisterThumbnail", "Dwmapi.dll");
external(INT, "DwmUpdateThumbnailProperties", "DwmUpdateThumbnailProperties", "Dwmapi.dll");
win w=window ("Program Manager", "Progman", -1); // окно, с которого нужно получить изображение (главное окно, не контрол)
if(w)
{
createdialog(0);
loop()sleep(10);
}
else messagebox("Окно не найдено");
function getmessage(0, WM_CREATE)
{
showdialog(0, "Диалог", 0, 0, w.width/3, w.height/3+30, 1, 1);
int rect[4] = {0, 0, w.width/3, w.height/3} // какого размера вывести изображение на диалог
//int rect_source[4] = {100, 200, 700, 537} // координаты откуда получить изображение (если нужно)
char transparency_ = 255; // прозрачность от 0 до 255
int ThumbnailId;
char DWM_THUMBNAIL_PROPERTIES[40];
writeaddress(// флаги
DWM_TNP_SOURCECLIENTAREAONLY // выводить клиентскую область, иначе всё окно
| DWM_TNP_VISIBLE // миниатюра видима
| DWM_TNP_OPACITY // прозрачность
| DWM_TNP_RECTDESTINATION // какого размера выводить изображение
//| DWM_TNP_RECTSOURCE // какого размера получать изображение
, address(#DWM_THUMBNAIL_PROPERTIES[0]));
writeaddress(rect[0], address(#DWM_THUMBNAIL_PROPERTIES[4]));
writeaddress(rect[1], address(#DWM_THUMBNAIL_PROPERTIES[8]));
writeaddress(rect[2], address(#DWM_THUMBNAIL_PROPERTIES[12]));
writeaddress(rect[3], address(#DWM_THUMBNAIL_PROPERTIES[16]));
//writeaddress(rect_source[0], address(#DWM_THUMBNAIL_PROPERTIES[20])); // если нужно получить изображение части окна
//writeaddress(rect_source[1], address(#DWM_THUMBNAIL_PROPERTIES[24]));
//writeaddress(rect_source[2], address(#DWM_THUMBNAIL_PROPERTIES[28]));
//writeaddress(rect_source[3], address(#DWM_THUMBNAIL_PROPERTIES[32]));
DWM_THUMBNAIL_PROPERTIES[36]=transparency_;
DWM_THUMBNAIL_PROPERTIES[37]=1;
DWM_THUMBNAIL_PROPERTIES[38]=1;
int x=DwmRegisterThumbnail(gethwnd(0), formatwi(w), address(#ThumbnailId));
//messagebox(x);
if(x==0)
{
int y=DwmUpdateThumbnailProperties(ThumbnailId, address(#DWM_THUMBNAIL_PROPERTIES[0]));
//messagebox(y);
}
}
В отличии от visualwindow меньше теряется качество при сжатии. |
|
|
Zireael |
Отправлено: 08 Мая, 2019 - 16:41:38
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как она будет работать если вывести изображение из браузера, но браузер скрыт
Нельзя получать изображение со свёрнутого или скрытого окна.
Цитата: сделать на задний план
Нет. |
|
|
Zireael |
Отправлено: 08 Мая, 2019 - 19:25:50
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: 2) Не получилось сделать полупрозрачность изменением параметра: transparency_
Это прозрачность выводимой картинки. Для прозрачности самого окна функция кибор transparency.
Цитата: 1) Как сделать несколько таких окон-миниатюр с разных окон-доноров?
Либо 3 отдельных окна.
Либо выводить в одно окно:
code (Отобразить)CODE:#define DWM_TNP_RECTDESTINATION 1
#define DWM_TNP_VISIBLE 8
#define DWM_TNP_SOURCECLIENTAREAONLY 16
external(INT, "DwmRegisterThumbnail", "DwmRegisterThumbnail", "Dwmapi.dll");
external(INT, "DwmUpdateThumbnailProperties", "DwmUpdateThumbnailProperties", "Dwmapi.dll");
win w1=window ("Program Manager", "Progman", -1); // окно, с которого нужно получить изображение
win w2=window ("Program Manager", "Progman", -1); // ещё окно, для примера тоже самое, можно другое
win w3=window ("Program Manager", "Progman", -1); // ещё окно
win w4=window ("Program Manager", "Progman", -1); // ещё окно
createdialog(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
showdialog(0, "Диалог", 0, 0, 520, 320, 1, 1);
int ThumbnailId;
char DWM_THUMBNAIL_PROPERTIES[40];
writeaddress(// флаги
DWM_TNP_SOURCECLIENTAREAONLY // выводить клиентскую область, иначе всё окно
| DWM_TNP_VISIBLE // миниатюра видима
| DWM_TNP_RECTDESTINATION // какого размера выводить изображение
, address(#DWM_THUMBNAIL_PROPERTIES[0]));
DWM_THUMBNAIL_PROPERTIES[37]=1;
DWM_THUMBNAIL_PROPERTIES[38]=1;
// координаты для первого окна
writeaddress(0, address(#DWM_THUMBNAIL_PROPERTIES[4]));
writeaddress(0, address(#DWM_THUMBNAIL_PROPERTIES[8]));
writeaddress(250, address(#DWM_THUMBNAIL_PROPERTIES[12]));
writeaddress(140, address(#DWM_THUMBNAIL_PROPERTIES[16]));
if(DwmRegisterThumbnail(gethwnd(0), formatwi(w1), address(#ThumbnailId))==0)
{
DwmUpdateThumbnailProperties(ThumbnailId, address(#DWM_THUMBNAIL_PROPERTIES[0]));
}
///////////////////
// координаты для второго
writeaddress(0, address(#DWM_THUMBNAIL_PROPERTIES[4]));
writeaddress(150, address(#DWM_THUMBNAIL_PROPERTIES[8]));
writeaddress(250, address(#DWM_THUMBNAIL_PROPERTIES[12]));
writeaddress(290, address(#DWM_THUMBNAIL_PROPERTIES[16]));
if(DwmRegisterThumbnail(gethwnd(0), formatwi(w2), address(#ThumbnailId))==0)
{
DwmUpdateThumbnailProperties(ThumbnailId, address(#DWM_THUMBNAIL_PROPERTIES[0]));
}
/////////////////////
writeaddress(260, address(#DWM_THUMBNAIL_PROPERTIES[4]));
writeaddress(0, address(#DWM_THUMBNAIL_PROPERTIES[8]));
writeaddress(510, address(#DWM_THUMBNAIL_PROPERTIES[12]));
writeaddress(140, address(#DWM_THUMBNAIL_PROPERTIES[16]));
if(DwmRegisterThumbnail(gethwnd(0), formatwi(w3), address(#ThumbnailId))==0)
{
DwmUpdateThumbnailProperties(ThumbnailId, address(#DWM_THUMBNAIL_PROPERTIES[0]));
}
writeaddress(260, address(#DWM_THUMBNAIL_PROPERTIES[4]));
writeaddress(150, address(#DWM_THUMBNAIL_PROPERTIES[8]));
writeaddress(510, address(#DWM_THUMBNAIL_PROPERTIES[12]));
writeaddress(290, address(#DWM_THUMBNAIL_PROPERTIES[16]));
if(DwmRegisterThumbnail(gethwnd(0), formatwi(w4), address(#ThumbnailId))==0)
{
DwmUpdateThumbnailProperties(ThumbnailId, address(#DWM_THUMBNAIL_PROPERTIES[0]));
}
} |
|
|
Skycrew |
Отправлено: 13 Мая, 2019 - 00:27:43
|
Мастер
Покинул форум
Сообщений всего: 123
Дата рег-ции: Июль 2014
Репутация: 0
|
Zireael пишет: Цитата: А окна всегда поверх всех других или там можно задать параметр?
В showindow есть параметр.
Благодарю, дружище! ) |
|
|
007wan |
Отправлено: 20 Октября, 2019 - 13:00:35
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Не вижу параметра "Масштаб" нету его тут, да?
(Добавление)
Zireael пишет: Вывод миниатюры окна на диалог (Отобразить)CODE:#define DWM_TNP_RECTDESTINATION 1
#define DWM_TNP_RECTSOURCE 2
#define DWM_TNP_OPACITY 4
#define DWM_TNP_VISIBLE 8
#define DWM_TNP_SOURCECLIENTAREAONLY 16
external(INT, "DwmRegisterThumbnail", "DwmRegisterThumbnail", "Dwmapi.dll");
external(INT, "DwmUpdateThumbnailProperties", "DwmUpdateThumbnailProperties", "Dwmapi.dll");
win w=window ("Program Manager", "Progman", -1); // окно, с которого нужно получить изображение (главное окно, не контрол)
if(w)
{
createdialog(0);
loop()sleep(10);
}
else messagebox("Окно не найдено");
function getmessage(0, WM_CREATE)
{
showdialog(0, "Диалог", 0, 0, w.width/3, w.height/3+30, 1, 1);
int rect[4] = {0, 0, w.width/3, w.height/3} // какого размера вывести изображение на диалог
//int rect_source[4] = {100, 200, 700, 537} // координаты откуда получить изображение (если нужно)
char transparency_ = 255; // прозрачность от 0 до 255
int ThumbnailId;
char DWM_THUMBNAIL_PROPERTIES[40];
writeaddress(// флаги
DWM_TNP_SOURCECLIENTAREAONLY // выводить клиентскую область, иначе всё окно
| DWM_TNP_VISIBLE // миниатюра видима
| DWM_TNP_OPACITY // прозрачность
| DWM_TNP_RECTDESTINATION // какого размера выводить изображение
//| DWM_TNP_RECTSOURCE // какого размера получать изображение
, address(#DWM_THUMBNAIL_PROPERTIES[0]));
writeaddress(rect[0], address(#DWM_THUMBNAIL_PROPERTIES[4]));
writeaddress(rect[1], address(#DWM_THUMBNAIL_PROPERTIES[8]));
writeaddress(rect[2], address(#DWM_THUMBNAIL_PROPERTIES[12]));
writeaddress(rect[3], address(#DWM_THUMBNAIL_PROPERTIES[16]));
//writeaddress(rect_source[0], address(#DWM_THUMBNAIL_PROPERTIES[20])); // если нужно получить изображение части окна
//writeaddress(rect_source[1], address(#DWM_THUMBNAIL_PROPERTIES[24]));
//writeaddress(rect_source[2], address(#DWM_THUMBNAIL_PROPERTIES[28]));
//writeaddress(rect_source[3], address(#DWM_THUMBNAIL_PROPERTIES[32]));
DWM_THUMBNAIL_PROPERTIES[36]=transparency_;
DWM_THUMBNAIL_PROPERTIES[37]=1;
DWM_THUMBNAIL_PROPERTIES[38]=1;
int x=DwmRegisterThumbnail(gethwnd(0), formatwi(w), address(#ThumbnailId));
//messagebox(x);
if(x==0)
{
int y=DwmUpdateThumbnailProperties(ThumbnailId, address(#DWM_THUMBNAIL_PROPERTIES[0]));
//messagebox(y);
}
}
В отличии от visualwindow меньше теряется качество при сжатии.
Однозначно лучше, нашел сейчас плюс один.
Visuawindow выводит то, что видит на что получен фокус, а миниатюра выводит на что получен фокус и только." Пример: visuawindow выводит рабочий стол, но диалоговое окно, которое открыто на рабочем столе видимо в visuawindow, а в миниатюр оно скрыто(его нету), потому что фокус ТОЛЬКО на рабочий стол. |
|
|
Zireael |
Отправлено: 20 Октября, 2019 - 13:17:58
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Не вижу параметра "Масштаб"
Цитата: int rect[4] = {0, 0, w.width/3, w.height/3} // какого размера вывести изображение на диалог |
|
|
|