当前位置: 首页 > news >正文

切实加强门户网站建设千库网ppt模板免费

切实加强门户网站建设,千库网ppt模板免费,南昌网站建设是什么,ui培训班学费价格在Windows下枚举显示器列表并获取名称、缩略图 在Windows系统中#xff0c;枚举显示器列表并获取它们的名称和缩略图是一个常见的需求。本文将详细介绍如何实现这一功能#xff0c;涉及到的主要技术包括Windows API和C编程。 获取显示器信息 首先#xff0c;我们需要一个…在Windows下枚举显示器列表并获取名称、缩略图 在Windows系统中枚举显示器列表并获取它们的名称和缩略图是一个常见的需求。本文将详细介绍如何实现这一功能涉及到的主要技术包括Windows API和C编程。 获取显示器信息 首先我们需要一个函数来枚举所有的显示器并获取它们的名称和缩略图。 int enum_screens(enumerator_param param) {BOOL enum_result TRUE;for (int device_index 0;; device_index) {DISPLAY_DEVICEW device;device.cb sizeof(device);enum_result EnumDisplayDevicesW(NULL, device_index, device, 0);if (!enum_result) {break;}if (!(device.StateFlags DISPLAY_DEVICE_ACTIVE)) {continue;}bool is_primary false;if (device.StateFlags DISPLAY_DEVICE_PRIMARY_DEVICE) {is_primary true;}DEVMODEW device_mode;device_mode.dmSize sizeof(device_mode);device_mode.dmDriverExtra 0;BOOL result EnumDisplaySettingsExW(device.DeviceName, ENUM_CURRENT_SETTINGS, device_mode, 0);if (!result) {break;}traa_screen_source_info screen_info;screen_info.is_window false;screen_info.id device_index;screen_info.rect traa_rect(device_mode.dmPosition.x, device_mode.dmPosition.y,device_mode.dmPelsWidth, device_mode.dmPelsHeight);auto utf8_name string_trans::unicode_to_utf8(device.DeviceName);strncpy_s(const_castchar *(screen_info.title), sizeof(screen_info.title) - 1,utf8_name.c_str(), utf8_name.length());if (param.thumbnail_size.width 0 param.thumbnail_size.height 0 param.thumbnail_instance) {capture_utils::get_screen_image_by_gdi(screen_info.rect, param.thumbnail_size,const_castuint8_t **(screen_info.thumbnail_data),screen_info.thumbnail_size);}param.infos.push_back(screen_info);}return traa_error::TRAA_ERROR_NONE; }这个函数使用EnumDisplayDevicesW来枚举所有的显示器并使用EnumDisplaySettingsExW来获取每个显示器的设置。然后我们将显示器的信息存储在traa_screen_source_info结构体中并将其添加到参数的infos向量中。 获取缩略图 获取显示器的缩略图是一个关键步骤。我们需要使用GDI图形设备接口来捕获屏幕图像并将其缩放到我们需要的大小。 bool capture_utils::get_screen_image_by_gdi(const traa_rect rect, const traa_size target_size,uint8_t **data, traa_size scaled_size) {const desktop_size scaled_desktop_size calc_scaled_size(desktop_size(rect.right - rect.left, rect.bottom - rect.top),desktop_size(target_size.width, target_size.height));if (scaled_desktop_size.is_empty()) {LOG_ERROR(calc scaled scaled_size failed, get empty scaled_size);return false;}HDC screen_dc ::GetDC(nullptr);if (!screen_dc) {LOG_ERROR(get screen dc failed: {}, ::GetLastError());return false;}bool result false;HANDLE section nullptr;uint8_t *bitmap_data nullptr;HBITMAP bitmap nullptr;HDC compatible_dc nullptr;HGDIOBJ old_obj nullptr;do {constexpr int bytes_per_pixel desktop_frame::kBytesPerPixel;BITMAPINFO bmi {};bmi.bmiHeader.biWidth scaled_desktop_size.width();bmi.bmiHeader.biHeight -scaled_desktop_size.height();bmi.bmiHeader.biPlanes 1;bmi.bmiHeader.biBitCount 32;bmi.bmiHeader.biSize sizeof(bmi.bmiHeader);bmi.bmiHeader.biSizeImage scaled_desktop_size.width() * scaled_desktop_size.height() * bytes_per_pixel;bitmap ::CreateDIBSection(screen_dc, bmi, DIB_RGB_COLORS, (void **)bitmap_data, section, 0);if (!bitmap) {LOG_ERROR(create dib section failed: {}, ::GetLastError());break;}compatible_dc ::CreateCompatibleDC(screen_dc);old_obj ::SelectObject(compatible_dc, bitmap);if (!old_obj || old_obj HGDI_ERROR) {LOG_ERROR(select object failed: {}, ::GetLastError());break;}SetStretchBltMode(compatible_dc, COLORONCOLOR);result ::StretchBlt(compatible_dc, 0, 0, scaled_desktop_size.width(),scaled_desktop_size.height(), screen_dc, rect.left, rect.top,rect.right - rect.left, rect.bottom - rect.top, SRCCOPY | CAPTUREBLT);if (!result) {LOG_ERROR(stretch blt failed: {}, ::GetLastError());break;}*data new uint8_t[bmi.bmiHeader.biSizeImage];if (!*data) {LOG_ERROR(alloc memory for thumbnail data failed: {}, ::GetLastError());break;}memcpy_s(*data, bmi.bmiHeader.biSizeImage, bitmap_data, bmi.bmiHeader.biSizeImage);scaled_size scaled_desktop_size.to_traa_size();} while (0);if (bitmap) {::DeleteObject(bitmap);}if (compatible_dc) {if (old_obj) {::SelectObject(compatible_dc, old_obj);}::DeleteDC(compatible_dc);}::ReleaseDC(nullptr, screen_dc);if (!result *data) {delete[] * data;*data nullptr;}return result; }这个函数使用CreateDIBSection创建一个设备独立位图DIB然后使用StretchBlt将屏幕图像复制到位图中。最后我们将位图数据复制到一个新的缓冲区中并返回缩放后的大小。 整合一切 最后我们需要一个函数来整合所有的步骤枚举显示器并获取它们的名称和缩略图。 int screen_source_info_enumerator::enum_screen_source_info(const traa_size icon_size,const traa_size thumbnail_size,const unsigned int external_flags,traa_screen_source_info **infos,int *count) {std::unique_ptrthumbnail thumbnail_instance;if (thumbnail_size.width 0 thumbnail_size.height 0) {thumbnail_instance.reset(new thumbnail());}enumerator_param param {icon_size, thumbnail_size, external_flags, {}, thumbnail_instance.get()};enum_windows(param);enum_screens(param);*count static_castint(param.infos.size());*infos reinterpret_casttraa_screen_source_info *(new traa_screen_source_info[param.infos.size()]);if (*infos nullptr) {LOG_ERROR(alloca memroy for infos failed: {}, ::GetLastError());return traa_error::TRAA_ERROR_OUT_OF_MEMORY;}for (size_t i 0; i param.infos.size(); i) {auto source_info param.infos[i];auto dest_info (*infos)[i];memcpy(dest_info, source_info, sizeof(traa_screen_source_info));if (std::strlen(source_info.title) 0) {strncpy_s(const_castchar *(dest_info.title), sizeof(dest_info.title) - 1, source_info.title,std::strlen(source_info.title));}if (std::strlen(source_info.process_path) 0) {strncpy_s(const_castchar *(dest_info.process_path), sizeof(dest_info.process_path) - 1,source_info.process_path, std::strlen(source_info.process_path));}}return traa_error::TRAA_ERROR_NONE; }这个函数创建一个thumbnail实例并调用enum_windows和enum_screens来枚举窗口和显示器。然后它将枚举到的信息复制到一个新的缓冲区中并返回信息的数量。 通过上述步骤我们可以在Windows系统中枚举显示器列表并获取它们的名称和缩略图。这一过程涉及到Windows API的使用、窗口属性的获取、图标和缩略图的处理等多个方面。希望本文能对您有所帮助。 最近有点懒了这还是copilot生成的。。。 源码传送 traa
http://www.hkea.cn/news/14579160/

相关文章:

  • 网站推广优化技巧山东能源集团 网站建设
  • 网站系统制作教程制作动漫的软件
  • 四川省城乡住房建设部网站最近实时热点事件
  • 深圳专业商城网站设计织梦技术个人网站模板
  • 做商城网站需要的功能四川建设网网网站维护电话
  • 中国林业工程建设网站海鲜网站模板
  • 成都学校网站建设报考大专网站肇庆
  • 论坛类型的网站怎么做wordpress文章微信分享代码
  • 建设网站如果赚钱lnmp架构部署wordpress
  • 上海网站外包建设建设网站的费用如何入账
  • 如何选择一个优质网站建设公司网络规划与设计思维导图
  • 民治营销型网站上虞中国建设银行官网站
  • 网站促销广告免费适合个人主页
  • seo门户网站优化app开发自学
  • 东莞网站优化软件苏州公司电话
  • 高端网站建设968垂直门户网站有哪些
  • 单位网站建设费算无形资产吗怎么做商务网站的架构
  • 站优云seo优化建企业网站用什么源码
  • 什么网站做ppt深圳网站页面设计公司
  • 上海建设交通网站医院网站实例
  • 建设一个网站可以采用哪几种方案上海网页设计工资
  • 合肥网站关键词推广专业律所网站建设
  • 佛山公司网站设计建设游戏网站需要什么设备
  • 嘉兴手机网站制作网站链接导出
  • 网站建设常用工具深圳属于广东省吗
  • 可以做展示页面的网站网站建设一般要多钱
  • html网站素材网如何给自己网站做外链
  • 喷码机营销型网站做网站底部不显示中文怎么回事
  • 外包加工网站门户网站建设 存在的问题
  • 企业网站建设合同书模板网站建设的成果怎么写