MonitorID和SerialNumber在Windows中,我们有关于Monitros的信息——一些独特的名称和ID。例如AcerxxxSamsungxxx我有问题如何在C#中获取信息,因为我知道我们可以从WMI获取序列号:rootWMI->WmiMonitorID和关于显示:root/CIMV2Win32_DesktopMonitor但我必须将这些信息放在一起,它可以说AceerS/Nxxx在Windows中有id1有人知道吗?试一试:使用System.Management;ManagementObjectSearchersearcher=newManagementObjectSearcher("root\CIMV2","SELECT*FROMWin32_DesktopMonitor");foreach(ManagementObjectobjinsearcher.Get())Console.WriteLine("Description:{0}",obj["Description"]);编辑:这里是一个漂亮的类的链接,它将检索监视器的详细信息:http://wmimonitor.svn.sourceforge.net/viewvc/wmimonitor/DisplayInfoWMIProvider/WMIProvider/WMIProvider.cs?view=markup这是与相关的类上面的链接。它应为您提供有关显示器的所有信息://DisplayInfoWMIProvider(c)2009byRogerZanderusingSystem;使用系统集合;使用System.Management.Instrumentation;使用System.DirectoryServices;使用系统管理;//使用System.Security.Principal;使用Microsoft.Win32;使用系统文本;使用System.Collections.Generic;使用System.ComponentModel;使用系统数据;使用System.Linq;[程序集:WmiConfiguration(@“rootcimv2”,HostingModel=ManagementHostingModel.LocalSystem)]命名空间DisplayInfoWMIProvider{[System.ComponentModel.RunInstaller(true)]publicclassMyInstall:DefaultManagementInstaller{publicoverridevoidInstall(IDictionarystateSaver){base.Install(stateSaver);System.Runtime.InteropServices.RegistrationServicesRS=newSystem.Runtime.InteropServices.RegistrationServices();//这应该通过.NET3.5SP1修复//RS.RegisterAssembly(System.Reflection.Assembly.LoadFile(Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%ReferenceAssembliesMicrosoftFrameworkv3.5System.Management.Instrumentation.dll")),System.Runtime.InteropServices.AssemblyRegistrationFlags.SetCodeBase);}publicoverridevoidUninstall(IDictionarysavedState){尝试{ManagementClassMC=newManagementClass(@"rootcimv2:Win32_MonitorDetails");MC.Delete();}catch{}try{base.Uninstall(savedState);}catch{}}}[ManagementEntity(Name="Win32_MonitorDetails")]publicclassDisplayDetails{[ManagementKey]publicstringPnPID{get;设置;}[ManagementProbe]publicstringSerialNumber{get;set;}[ManagementProbe]publicstringModel{get;set;}[ManagementProbe]publicstringMonitorID{get;set;}//////要创建的构造函数DisplayDetails类的新实例...///publicDisplayDetails(stringsPnPID,stringsSerialNumber,stringsModel,stringsMonitorID){PnPID=sPnPID;SerialNumber=sSerialNumber;Model=sModel;MonitorID=sMonitorID;}//////这很有趣操作返回所有监视器详细信息//////[ManagementEnumerator]staticpublicIEnumerableGetMonitorDetails(){//打开显示Reg-KeyRegistryKeyDisplay=Registry.LocalMachine;布尔bFailed=false;尝试{Display=Registry.LocalMachine.OpenSubKey(@"SYSTEMCurrentControlSetEnumDISPLAY");}catch{bFailed=true;}if(!bFailed&(Display!=null)){//获取所有的MonitorIDssforeach(stringsMonitorIDinDisplay.GetSubKeyNames()){RegistryKeyMonitorID=Display.OpenSubKey(sMonitorID);if(MonitorID!=null){//获取所有即插即用IDforeach(stringsPNPIDinMonitorID.GetSubKeyNames()){RegistryKeyPnPID=MonitorID.OpenSubKey(sPNPID);if(PnPID!=null){string[]sSubkeys=PnPID.GetSubKeyNames();//检查Monitor是否处于活动状态字符串sSerial="";字符串sModel="";//定义搜索hKeysstringsSerFind=newstring(newchar[]{(char)00,(char)00,(char)00,(char)0xff});stringsModFind=newstring(newchar[]{(char)00,(char)00,(char)00,(char)0xfc});//获取EDID码byte[]bObj=DevParam.GetValue("EDID",null)asbyte[];if(bObj!=null){//获取4个Vesa描述符块string[]sDescriptor=newstring[4];sDescriptor[0]=Encoding.Default.GetString(bObj,0x36,18);sDescriptor[1]=Encoding.Default.GetString(bObj,0x48,18);sDescriptor[2]=Encoding.Default.GetString(bObj,0x5A,18);sDescriptor[3]=Encoding.Default.GetString(bObj,0x6C,18);//搜索键foreach(stringsDescinsDescriptor){if(sDesc.Contains(sSerFind)){sSerial=sDesc.Substring(4).Replace("","").Trim();}if(sDesc.Contains(sModFind)){sModel=sDesc.Substring(4).Replace("","").Trim();}}}if(!string.IsNullOrEmpty(sPNPID+sSerFind+sModel+sMonitorID)){yieldreturnnewDisplayDetails(sPNPID,sSerial,sModel,sMonitorID);}}}}}}}}}}}}root/CIMV2/Win32_DesktopMonitor/PnPDeviceID仅显示我的5个显示器中的2个,root/WMI/WMIMonitorId/InstanceName显示我的所有5个显示器strComputer="."设置objWMIService=GetObject("winmgmts:\"&strComputer&"rootWMI")设置colItems=objWMIService.ExecQuery(_"SELECT*FROMWmiMonitorID",,48)ForEachobjItemincolItemsWscript.Echo"------------------------------------"Wscript.回显“WmiMonitorID实例”Wscript。echo"-----------------------------------"Wscript.Echo"InstanceName:"&objItem.InstanceNameNext例如,我们使用它来使用WMI从主硬盘中检索序列号:varsearch=newManagementObjectSearcher("select*fromWin32_LogicalDiskwhereDeviceID='C:'");varserials=search.Get().OfType();m_clientToken=serials.ElementAt(0)["VolumeSerialNumber"].ToString();也许您可以利用它来获取您的监视器信息,因为您知道要搜索哪个Mgmt对象,您基本上使用SQL来检索您要查找的内容。在我看来root/CIMV2/Win32_DesktopMonitor/PnPDeviceID(1)和root/WMI/WMIMonitorId/InstanceName(2)几乎相同我在我的计算机上使用WMIExplorer(1)DISPLAYHWP28685&3EB7FBC&0发现了以下内容&UID16777472(2)DISPLAYHWP28685&3eb7fbc&0&UID16777472_0有两个区别:(2)末尾的_0和(2)的部分是小写的事实。我目前没有多个监视器可供参考,因此我无法为您提供更准确的关联这两个条目的方法。但在我看来,您可以编写两个查询,修改其中一个中的搜索条件以匹配另一种格式。但是您需要调查是否有可靠的模式来执行此操作。无论如何,似乎有足够多的公共元素能够在代码中匹配,如果不是通过查询的话。以上就是C#学习教程的全部内容:监控ID和流水号分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
