win32 - QueryDisplayConfig的使用
QueryDisplayConfig函数检索关于所有显示设备的所有可能的显示路径,或视图,在当前设置的信息。
C++样本: (开箱即用)
代码列出了所有显示器的名称和拓展模式
#include <Windows.h>
#include <iostream>
#include <vector>
#include <cstdio> std::wstring getMonitorName(HMONITOR monitor) {
DISPLAYCONFIG_TOPOLOGY_ID currentTopologyId;
MONITORINFOEXW info;
info.cbSize = sizeof(info);
GetMonitorInfoW(monitor, &info); UINT32 requiredPaths, requiredModes;
GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &requiredPaths, &requiredModes);
std::vector<DISPLAYCONFIG_PATH_INFO> paths(requiredPaths);
std::vector<DISPLAYCONFIG_MODE_INFO> modes(requiredModes);
QueryDisplayConfig(QDC_DATABASE_CURRENT, &requiredPaths, paths.data(), &requiredModes, modes.data(), ¤tTopologyId);
switch (currentTopologyId)
{
case DISPLAYCONFIG_TOPOLOGY_INTERNAL:
break;
case DISPLAYCONFIG_TOPOLOGY_CLONE:
{
std::wcout << "CLONE Mode" << L"\n";
break;
} case DISPLAYCONFIG_TOPOLOGY_EXTEND:
{
std::wcout << "EXTEND Mode" << L"\n";
break;
}
case DISPLAYCONFIG_TOPOLOGY_EXTERNAL:
break;
default: break;
}
for (auto& p : paths) {
DISPLAYCONFIG_SOURCE_DEVICE_NAME sourceName;
sourceName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME;
sourceName.header.size = sizeof(sourceName);
sourceName.header.adapterId = p.sourceInfo.adapterId;
sourceName.header.id = p.sourceInfo.id;
std::wcout << L"sourceInfo adapterId: " << p.sourceInfo.adapterId.HighPart <<" "<< p.sourceInfo.adapterId.LowPart<<L"\n";
std::wcout << L"sourceInfo id: " << p.sourceInfo.id << L"\n";
std::wcout << L"targetInfo adapterId: " << p.targetInfo.adapterId.HighPart <<" "<< p.targetInfo.adapterId.LowPart<<L"\n";
std::wcout << L"targetInfo id: " << p.targetInfo.id << L"\n";
DisplayConfigGetDeviceInfo(&sourceName.header);
if (wcscmp(info.szDevice, sourceName.viewGdiDeviceName) == 0) {
DISPLAYCONFIG_TARGET_DEVICE_NAME name;
name.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
name.header.size = sizeof(name);
name.header.adapterId = p.sourceInfo.adapterId;
name.header.id = p.targetInfo.id;
DisplayConfigGetDeviceInfo(&name.header);
return std::wstring(name.monitorFriendlyDeviceName);
}
}
return L"";
} BOOL CALLBACK MyInfoEnumProc(
HMONITOR hMonitor,
HDC hdcMonitor,
LPRECT lprcMonitor,
LPARAM dwData
)
{
MONITORINFOEX mi;
ZeroMemory(&mi, sizeof(mi));
mi.cbSize = sizeof(mi);
GetMonitorInfo(hMonitor, &mi);
wprintf(L"DisplayDevice: %s\n", mi.szDevice); std::wcout << L"Name: " << getMonitorName(hMonitor) << L"\n";
return TRUE;
} int main()
{
printf("\n\nEnumDisplayDevices\n\n\n"); DISPLAY_DEVICE dd;
ZeroMemory(&dd, sizeof(dd));
dd.cb = sizeof(dd);
for (int i = 0; EnumDisplayDevices(NULL, i, &dd, 0); i++)
{
wprintf(L"\n\nDevice %d:", i);
wprintf(L"\n DeviceName: '%s'", dd.DeviceName);
wprintf(L"\n DeviceString: '%s'", dd.DeviceString);
wprintf(L"\n StateFlags: %s%s%s%s%s",
((dd.StateFlags &
DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) ?
L"desktop " : L""),
((dd.StateFlags &
DISPLAY_DEVICE_PRIMARY_DEVICE) ?
L"primary " : L""),
((dd.StateFlags & DISPLAY_DEVICE_VGA_COMPATIBLE) ?
L"vga " : L""),
((dd.StateFlags &
DISPLAY_DEVICE_MULTI_DRIVER) ?
L"multi " : L""),
((dd.StateFlags &
DISPLAY_DEVICE_MIRRORING_DRIVER) ?
L"mirror " : L"")); // Get more info about the device
DISPLAY_DEVICE dd2;
ZeroMemory(&dd2, sizeof(dd2));
dd2.cb = sizeof(dd2);
EnumDisplayDevices(dd.DeviceName, 0, &dd2, 0);
wprintf(L"\n DeviceID: '%s'", dd2.DeviceID);
wprintf(L"\n Monitor Name: '%s'", dd2.DeviceString);
} printf("\n\n\nEnumDisplayMonitors\n\n\n"); EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0); return 0;
}
win32 - QueryDisplayConfig的使用的更多相关文章
- C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...
- java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
JNA 调用 dll 库时,保错: ///////////////// 通过 JNA 引入 DLL 库 //////////// /** * ID_FprCap.dll 负责指纹的采集, 指纹仪的初始 ...
- 初次认识 C# win32 api
第一次接触win32api,刚开始的时候有点迷迷糊糊的. Windows API 就是windows应用程序接口. win api向上就是windows应用程序,向下就是windows操作系统核心. ...
- [老文章搬家] [翻译] 深入解析win32 crt 调试堆
09 年翻译的东西. 原文见: http://www.nobugs.org/developer/win32/debug_crt_heap.html 在DeviceStudio的Debug编译模式下, ...
- Virus.Win32.Virlock.b分析
0x00 样本说明 分析样本是被0b500d25f645c0b25532c1e3c9741667的样本感染得到.感染前的文件是Tcpview.exe,一款windows网络连接查看工具. 感染前后文件 ...
- cocos2d-x 从win32到android移植的全套解决方案
引言:我们使用cocos2d-x引擎制作了一款飞行射击游戏,其中创新性地融入了手势识别功能.但是我们在移植过程中遇到了很多的问题,同时也发现网上的资料少而不全.所以在项目行将结束的时候,我们特地写了这 ...
- Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
今天使用Git在命令行下更新代码遇到了问题,起初觉得是自己安装某软件导致冲突,从网上搜索了一下找到类似问题,成功解决问题. 错误信息如下: E:\storm-sql>git pull origi ...
- ATL封装IE内核启示:使用Win32/ATL建立窗口
开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是 ...
- Win32 OpenProcess打开进程失败,返回5无权限操作
Win32 OpenProcess打开进程失败,返回5无权限操作,相信你会碰到这样的事,在IDE中可以,单独却不可以了,其实这时就需要提权了,否则是无法打开的,OpenProcess提权至Debug即 ...
- win32进程名查找进程PID
1. #include <Psapi.h> #pragma comment(lib, "Psapi.lib") DWORD GetProcIDFromName(LPCT ...
随机推荐
- [转帖]Jmeter学习笔记(十九)——后置处理器之正则表达式的使用
https://www.cnblogs.com/pachongshangdexuebi/p/11733005.html 一.正则表达式提取器的作用 允许用户从服务器的响应中通过使用perl的正则表达式 ...
- [转帖]sqlplus与shell互相传值的几种情况
https://www.cnblogs.com/youngerger/p/9068888.html sqlplus与shell互相传值的几种情况 情况一:在shell中最简单的调用sqlplus $c ...
- [转帖]ssd/san/sas/磁盘/光纤/RAID性能比较
https://plantegg.github.io/2022/01/25/ssd_san%E5%92%8Csas%E7%A3%81%E7%9B%98%E6%80%A7%E8%83%BD%E6%AF% ...
- [转帖]FIO磁盘性能测试工具
https://www.cnblogs.com/lyhabc/p/16708771.html 简介 一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用, ...
- ChatGPT学习之_shell脚本一例-查找版本冲突的第三方jar包
ChatGPT学习之_shell脚本一例-查找版本冲突的第三方jar包 背景 自从换了Java后 产品里面用到了非常多的第三方组建,也就是很多jar包. 产品内的研发规范要求, jar包不能带版本号和 ...
- [转帖]深入理解mysql-第十二章 mysql查询优化-Explain 详解(下)
我们前面两章详解了Explain的各个属性,我们看到的都是mysql已经生成的执行计划,那这个执行计划的是如何生成的?我们能看到一些过程指标数据吗?实际mysql贴心为我们提供了执行计划的各项成本评估 ...
- SPECJVM2008的简单结果
SPECJVM2008的简单结果 摘要 前面两天学习了SPECJVM2008简单使用. 今天进行一下简单的数据采集. 需要说明一下SPECJVM2008貌似仅兼容JDK1.8 更新的LTS版本都不兼容 ...
- [转帖]Cat导致内存不足原因分析
背景 线上几亿的数据在回刷的时候容器服务会出现OOM而重启,导致任务中断 内存泄露分析 jmap -histo pid 找出了有几十亿的java.lang.StackTraceElement对象,找不 ...
- Sysbench 开启超线程/关闭超线程以及容器运行数据库的性能损耗
Sysbench 开启超线程/关闭超线程性能损耗 摘要 Stress-NG 测试完之后 突然想 使用sysbenchen也进行一次压测 验证一把 超线程对数据的性能影响. 压测命令 ./sysbenc ...
- Redis 菜鸟进阶
Redis 菜鸟进阶 背景 最近产品一直要优化性能,加强高可用. 有一个课题是Redis高可用与性能调优. 我这边其实获取到的内容很有限. 最近济南疫情严重,自己锁骨骨折. 然后通勤时间基本上都用来查 ...