// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>#include <atlstr.h>
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")            typedef enum _D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY {D3DKMDT_VOT_UNINITIALIZED = -2,D3DKMDT_VOT_OTHER = -1,D3DKMDT_VOT_HD15 = 0,D3DKMDT_VOT_SVIDEO = 1,D3DKMDT_VOT_COMPOSITE_VIDEO = 2,D3DKMDT_VOT_COMPONENT_VIDEO = 3,D3DKMDT_VOT_DVI = 4,D3DKMDT_VOT_HDMI = 5,D3DKMDT_VOT_LVDS = 6,D3DKMDT_VOT_D_JPN = 8,D3DKMDT_VOT_SDI = 9,D3DKMDT_VOT_DISPLAYPORT_EXTERNAL = 10,D3DKMDT_VOT_DISPLAYPORT_EMBEDDED = 11,D3DKMDT_VOT_UDI_EXTERNAL = 12,D3DKMDT_VOT_UDI_EMBEDDED = 13,D3DKMDT_VOT_SDTVDONGLE = 14,
#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3_M1)D3DKMDT_VOT_MIRACAST = 15,
#endif D3DKMDT_VOT_INTERNAL = 0x80000000,D3DKMDT_VOT_SVIDEO_4PIN = D3DKMDT_VOT_SVIDEO,D3DKMDT_VOT_SVIDEO_7PIN = D3DKMDT_VOT_SVIDEO,D3DKMDT_VOT_RF = D3DKMDT_VOT_COMPOSITE_VIDEO,D3DKMDT_VOT_RCA_3COMPONENT = D3DKMDT_VOT_COMPONENT_VIDEO,D3DKMDT_VOT_BNC = D3DKMDT_VOT_COMPONENT_VIDEO
} D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY;_D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY GetConnectorInfo(LPCWSTR ShortDeviceID)
{_D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY result = D3DKMDT_VOT_OTHER;BSTR strNetworkResource;strNetworkResource = (BSTR)L"\\\\.\\root\\WMI";HRESULT hres;hres = CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hres)){cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl;cout << _com_error(hres).ErrorMessage() << endl;cout << "press enter to exit" << endl;cin.get();std::exit(1);}hres = CoInitializeSecurity(NULL,-1,                          // COM authenticationNULL,                        // Authentication servicesNULL,                        // ReservedRPC_C_AUTHN_LEVEL_DEFAULT,   // Default authenticationRPC_C_IMP_LEVEL_IMPERSONATE, // Default ImpersonationNULL,                        // Authentication infoEOAC_NONE,                   // Additional capabilitiesNULL                         // Reserved);if (FAILED(hres)){cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl;cout << _com_error(hres).ErrorMessage() << endl;CoUninitialize();cout << "press enter to exit" << endl;cin.get();std::exit(1);}IWbemLocator* pLoc = NULL;hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);if (FAILED(hres)){cout << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << endl;cout << _com_error(hres).ErrorMessage() << endl;CoUninitialize();cout << "press enter to exit" << endl;cin.get();std::exit(1);}IWbemServices* pSvc = NULL;hres = pLoc->ConnectServer(_bstr_t(strNetworkResource),      // Object path of WMI namespaceNULL,                    // User name. NULL = current userNULL,                    // User password. NULL = current0,                       // Locale. NULL indicates currentNULL,                    // Security flags.0,                       // Authority (e.g. Kerberos)0,                       // Context object&pSvc                    // pointer to IWbemServices proxy);if (FAILED(hres)){cout << "Could not connect. Error code = 0x" << hex << hres << endl;cout << _com_error(hres).ErrorMessage() << endl;pLoc->Release();CoUninitialize();cout << "press enter to exit" << endl;cin.get();std::exit(1);}hres = CoSetProxyBlanket(pSvc,                        // Indicates the proxy to setRPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxxRPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxxNULL,                        // Server principal nameRPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxxRPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxxNULL,                        // client identityEOAC_NONE                    // proxy capabilities);if (FAILED(hres)){cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;cout << _com_error(hres).ErrorMessage() << endl;pSvc->Release();pLoc->Release();CoUninitialize();cout << "press enter to exit" << endl;cin.get();std::exit(1);}IEnumWbemClassObject* pEnumerator = NULL;hres = pSvc->ExecQuery((BSTR)L"WQL", (BSTR)L"SELECT InstanceName, VideoOutputTechnology FROM WmiMonitorConnectionParams",WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);if (FAILED(hres)){cout << "ExecQuery failed" << " Error code = 0x" << hex << hres << endl;cout << _com_error(hres).ErrorMessage() << endl;pSvc->Release();pLoc->Release();CoUninitialize();cout << "press enter to exit" << endl;cin.get();std::exit(1);}IWbemClassObject* pclsObj = NULL;ULONG uReturn = 0;BOOL bFound = false;while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);if (0 == uReturn || FAILED(hr))break;VARIANT vtProp;CString DeviceID;hr = pclsObj->Get(L"InstanceName", 0, &vtProp, 0, 0);// Stringif (!FAILED(hr)){if ((vtProp.vt == VT_NULL) || (vtProp.vt == VT_EMPTY)){}else{DeviceID.Format(L"%s", vtProp.bstrVal);DeviceID = DeviceID.Mid(8, DeviceID.Find(L"\\", 9) - 8);bFound = DeviceID.Compare(ShortDeviceID) == 0;}}VariantClear(&vtProp);if (bFound){hr = pclsObj->Get(L"VideoOutputTechnology", 0, &vtProp, 0, 0);// Uint32if (!FAILED(hr)){if ((vtProp.vt == VT_NULL) || (vtProp.vt == VT_EMPTY))result = D3DKMDT_VOT_OTHER;else{result = (_D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY)vtProp.uintVal;}}}VariantClear(&vtProp);pclsObj->Release();pclsObj = NULL;if (bFound)break;}pSvc->Release();pLoc->Release();pEnumerator->Release();if (pclsObj != NULL)pclsObj->Release();CoUninitialize();return result;
}void GetDisplayInfo()
{DISPLAY_DEVICE lpDisplayDevice;lpDisplayDevice.cb = sizeof(lpDisplayDevice);DWORD iDevNum = 0;CString DeviceID;while (EnumDisplayDevices(0, iDevNum, &lpDisplayDevice, 0)){DISPLAY_DEVICE lpDisplayDevice2;ZeroMemory(&lpDisplayDevice2, sizeof(lpDisplayDevice2));lpDisplayDevice2.cb = sizeof(lpDisplayDevice2);DWORD devMon = 0;while (EnumDisplayDevices(lpDisplayDevice.DeviceName, devMon, &lpDisplayDevice2, 0)){if (lpDisplayDevice2.StateFlags & DISPLAY_DEVICE_ACTIVE && !(lpDisplayDevice2.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER)){DeviceID.Format(L"%s", lpDisplayDevice2.DeviceID);wcout << DeviceID.GetString() << endl;DeviceID = DeviceID.Mid(8, DeviceID.Find(L"\\", 9) - 8);_D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY VideoOutputTechnology = GetConnectorInfo(DeviceID.GetString());switch (VideoOutputTechnology){case D3DKMDT_VOT_HDMI:wcout << " VideoOutputTechnology : HDMI" << endl;break;case D3DKMDT_VOT_INTERNAL:wcout << " VideoOutputTechnology : Internal Monitor" << endl;break;default:wcout << " VideoOutputTechnology : " << VideoOutputTechnology << endl;break;}}devMon++;ZeroMemory(&lpDisplayDevice2, sizeof(lpDisplayDevice2));lpDisplayDevice2.cb = sizeof(lpDisplayDevice2);}ZeroMemory(&lpDisplayDevice, sizeof(lpDisplayDevice));lpDisplayDevice.cb = sizeof(lpDisplayDevice);iDevNum++;}
}int main(int argc, char* argv[])
{GetDisplayInfo();cout << "press enter to exit" << endl;cin.get();return 0;
}// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单// 入门使用技巧:
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

如果需要检测到报警:

    if (iDevNum == 0){MessageBeep(-1);Sleep(1000);MessageBeep(-1);Sleep(1000);MessageBeep(-1);}

Windows 当前所接的屏幕检测相关推荐

  1. 计算机检测不到双显示器,win10系统双屏幕检测不到第二屏幕怎么办 解决双屏幕不显示的方法步骤...

    win10系统双屏幕检测第二屏幕的方法步骤!很多win10系统用户都喜欢双屏显示,但是有时候可能会碰到一些情况,比如检测不到第二屏幕,那么电脑双屏幕检测不到第二屏幕怎么办呢?今天脚本之家小编就给大家详 ...

  2. 系统自带测试软件,用Windows自带工具给电脑检测的方法

    电脑使用时间久了渐渐出现了各种小毛病.不喜欢重装Windows系统的伙伴们会用第三方软件去检测.清理.修复,各种修修补补.电脑检测工具,大家最常用的估计就是鲁大师,但下载第三方软件会给电脑增加担负.其 ...

  3. 如何在Windows 8中更改登录屏幕的颜色

    Nearly every component of Windows 8 can be customized to suit your needs, some settings however are ...

  4. 标准配置的Windows平台上潜在可用屏幕区域

    经常在windows开发网站的朋友,在开始设计网站时,最需要知道的就是一个图片的大小和尺寸.我本人也是在windows上玩弄了几年的,虽然没有什么正规的证书之类的,但是自己对windows的东西,一些 ...

  5. 使用Windows XP 的放大镜、屏幕和键盘(转)

    使用Windows XP 的放大镜.屏幕和键盘(转)[@more@] 放大镜是针对那些有轻度视觉障碍的用户而设计的,使用放大镜可以使这些用户更容易地阅读屏幕上的内容,下面就来介绍如何使用放大镜. 使用 ...

  6. Windows平台下的内存泄漏检测

    Windows平台下的内存泄漏检测 一.使用_CrtDumpMemoryLeaks定位内存泄露 添加对应的头文件 转储内存泄漏信息 程序任意点退出 指定调试信息输出 二.定位具体内存泄露位置 内存快照 ...

  7. 智能电视验收测试软件,2018智能电视用户赞不绝口的三款屏幕检测软件,绝对干货!...

    原标题:2018智能电视用户赞不绝口的三款屏幕检测软件,绝对干货! 买电视后,很多朋友会发现,虽然电视是从厂家那里发的最新的货,但还是有不同层次的瑕疵,但电视机的保修期有限,该怎么查出所有电视上存在的 ...

  8. Windows 10 任务栏在屏幕的顶部或右侧

    Windows 10 任务栏在屏幕的顶部或右侧 1. 个性化 2. 任务栏 任务栏在屏幕上的位置 -> 靠右 References https://yongqiang.blog.csdn.net ...

  9. PD虚拟机 - 我无法在Windows全屏模式下保留自定义屏幕分辨率

    PD虚拟机 - 我无法在Windows全屏模式下保留自定义屏幕分辨率 症状 我尝试在全屏模式下手动设置 Windows 屏幕分辨率,但每次我重新启动虚拟机后,Windows 屏幕分辨率会恢复到默认值, ...

最新文章

  1. redis灵魂拷问:19图+11题带你面试通关
  2. python困难_Python开发总感觉困难重重,可能是你没用上这些开发工具
  3. (59)Linux操作系统深入应用
  4. 【数字智能三篇】之三: 一页纸说清楚“什么是深度学习?”
  5. 协程的三种同步方式Channel、Mutex、WaitGroup
  6. bzoj 4009 接水果 整体二分
  7. 51单片机支持python么_macOS搭建51单片机开发环境
  8. linux生成随机密码的十种方法
  9. Youtube Links
  10. 开课吧之Java常见面试题之RandomAccess接口
  11. 如何把jpg转换成word文档
  12. FireFly编辑器调用C语言,grasshopper的插件FireFly 萤火虫
  13. Aladdin HASP SRM(AES-128)加密狗破解经验分享
  14. 区块链学习——HyperLedger-Fabric v0.6环境搭建详细过程
  15. Linux Ubuntu系统fwknop单包授权认证(SPA)流程
  16. 怎么录屏幕视频?教你学会录制屏幕
  17. github windows系统监控_你需要的:Windows | 精品软件集
  18. 解题报告Best Time to Buy and Sell Stock with Cooldown
  19. 破解NET的四大神器
  20. 深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”

热门文章

  1. unicode中文数字与阿拉伯数字转换
  2. 吴恩达提出了著名的二八定律
  3. 万花筒写轮眼画法_万花筒写轮眼画法教程
  4. vivo全球商城架构演进之路
  5. 东北大学软件项目管理与过程改进复习提纲(2020)——第七章《项目成本管理》
  6. 虚拟机vmare安装CentOS7详细教程
  7. 计算机毕设(附源码)JAVA-SSM基于web的社团管理系统
  8. 文字怎么转语音?这些方法值得收藏
  9. 阶乘、排列、组合 公式计算
  10. python程序的三种控制结构_python二级考试大纲内容:程序的三种控制结构