众人拾柴火焰高,github给个star行不行?
open-traa/traa
traa
is a versatile project aimed at recording anything, anywhere. The primary focus is to provide robust solutions for various recording scenarios, making it a highly adaptable tool for multiple use cases.
在Windows下枚举显示器列表并获取名称、缩略图
在Windows系统中,枚举显示器列表并获取它们的名称和缩略图是一个常见的需求。本文将详细介绍如何实现这一功能,涉及到的主要技术包括Windows API和C++编程。
获取显示器信息
首先,我们需要一个函数来枚举所有的显示器,并获取它们的名称和缩略图。
int enum_screens(enumerator_param ¶m) {
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_cast<char *>(screen_info.title), sizeof(screen_info.title) - 1,
utf8_name.c_str(), utf8_name.length());
if (