Windows 下编程检测显示器信息及插拔

本文介绍了在Windows下获取显示器信息和检测显示器插拔的方法。通过EnumDisplayDevices()和EnumDisplayMonitors()函数可以获取显示设备和显示器信息,而GetSystemMetrics(SM_CMONITORS)用于获取显示器个数。当显示器被插拔时,可以利用WM_DEVICECHANGE消息和RegisterDeviceNotification()函数来监听设备变化,特别是使用设备接口GUID {E6F07B5F-EE97-4a90-B076-33F57BF4EAA7}来检测显示器的插入和移除。
摘要由CSDN通过智能技术生成

Windows下提示显示器信息主要通过两个函数实现。一个是EnumDisplayDevices(), 另一个是EnumDisplayMonitors(). EnumDisplayDevices()枚举所有显示设备,而EnumDisplayMonitors枚举的是所有显示器。显示设备和显示器不一样,比如显卡算显示设备,但是不是显示器。具体差别后面会分析。EnumDisplayMonitors()还会枚举出不可见的伪显示器,如果只是想得到实际的显示器数目的话可以用GetSystemMetrics(SM_CMONITORS), 该函数不包括虚拟显示器。


下面一段代码展示了这三个函数的用法和差别(参考自https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/668e3cf9-4e00-4b40-a6f8-c7d2fc1afd39/how-can-i-retrieve-monitor-information?forum=windowsgeneraldevelopmentissues


// MonitorSerialCtrlApp.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
using namespace std;

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);
    
    return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
  int numMonitor;
  int run=0;
  while(1)
  { 
    printf("*********************%d****************\n",run);
    run++;
    printf("\n\n\EnumDisplayDevices\n\n\n");
    DISPLAY_DEVICE dd;
    ZeroMemory(&dd, sizeof(dd));
    dd.cb = sizeof(dd);
    for(int i=0; EnumDisplayDevices(NULL, i, &dd, 0); i++)
    {
      //EnumDisplayDevices(NULL, i, &dd, 0);
      wprintf(L"\n\nDevice %d:"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>