Вывод миниатюры окна на диалог (Отобразить)
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);
}
}
#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 меньше теряется качество при сжатии.