zoukankan      html  css  js  c++  java
  • win32

    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(), &currentTopologyId);
        switch (currentTopologyId)
        {
        case DISPLAYCONFIG_TOPOLOGY_INTERNAL: 
            break;
        case DISPLAYCONFIG_TOPOLOGY_CLONE: 
        {
            std::wcout << "CLONE Mode" << L"
    ";
            break;
        }
            
        case DISPLAYCONFIG_TOPOLOGY_EXTEND: 
        {
            std::wcout << "EXTEND Mode" << L"
    ";
            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"
    ";
            std::wcout << L"sourceInfo id: " << p.sourceInfo.id << L"
    ";
            std::wcout << L"targetInfo adapterId: " << p.targetInfo.adapterId.HighPart <<" "<< p.targetInfo.adapterId.LowPart<<L"
    ";
            std::wcout << L"targetInfo id: " << p.targetInfo.id << L"
    ";
            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
    ", mi.szDevice);
    
        std::wcout << L"Name: " << getMonitorName(hMonitor) << L"
    ";
        return TRUE;
    }
    
    int main()
    {
        printf("
    
    EnumDisplayDevices
    
    
    ");
    
        DISPLAY_DEVICE dd;
        ZeroMemory(&dd, sizeof(dd));
        dd.cb = sizeof(dd);
        for (int i = 0; EnumDisplayDevices(NULL, i, &dd, 0); i++)
        {
            wprintf(L"
    
    Device %d:", i);
            wprintf(L"
        DeviceName:   '%s'", dd.DeviceName);
            wprintf(L"
        DeviceString: '%s'", dd.DeviceString);
            wprintf(L"
        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"
        DeviceID: '%s'", dd2.DeviceID);
            wprintf(L"
        Monitor Name: '%s'", dd2.DeviceString);
        }
    
        printf("
    
    
    EnumDisplayMonitors
    
    
    ");
    
        EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
    
    
        return 0;
    }
  • 相关阅读:
    七款HTML在线编辑器[下载]
    三层开发框架
    vs2005快捷键
    Javascript的IE和Firefox兼容性汇编
    序列化
    [Web2.0]web2.0中的tag及其技术实现
    结合FlyTreeView 无限级别的分类
    sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
    FlyTreeView4.3.2.82 破解方法 (NineRays.Web.UI.WebControls.FlyTreeView)
    asp.net 获取cpu序列号 硬盘ID 网卡硬地址
  • 原文地址:https://www.cnblogs.com/strive-sun/p/14605572.html
Copyright © 2011-2022 走看看