如何检查机器类型? 笔记本还是台式机

如何查看当前机器类型? 笔记本还是台式机

我从http://blog.csdn.net/antimatterworld/archive/2007/11/11/1878710.aspx得到了这个,它在我的家用机器(笔记本电脑上的Win2003)上运行良好,它返回“便携式”,但失败了我的工作机器(笔记本电脑上的Vista),它返回“其他”。

这是代码:

public enum ChassisTypes { Other = 1, Unknown, Desktop, LowProfileDesktop, PizzaBox, MiniTower, Tower, Portable, Laptop, Notebook, Handheld, DockingStation, AllInOne, SubNotebook, SpaceSaving, LunchBox, MainSystemChassis, ExpansionChassis, SubChassis, BusExpansionChassis, PeripheralChassis, StorageChassis, RackMountChassis, SealedCasePC } public static ChassisTypes GetCurrentChassisType() { ManagementClass systemEnclosures = new ManagementClass("Win32_SystemEnclosure"); foreach (ManagementObject obj in systemEnclosures.GetInstances()) { foreach (int i in (UInt16[ ])(obj["ChassisTypes"])) { if (i > 0 && i < 25) { return (ChassisTypes)i; } } } return ChassisTypes.Unknown; } 

这是一篇很好的微软文章,建议查看其他几个WMI类,以更好地了解计算机是笔记本电脑还是台式机:
http://technet.microsoft.com/en-us/library/cc180825.aspx

 Win32_SystemEnclosure, ChassisTypes(1)=10 Win32_Battery or Win32_PortableBattery Win32_PCMCIAController Win32_DriverVXD.Name = "pccard" Win32_ComputerSystem.Manufacturer Win32_ComputerSystem.Model 

它还建议在注册表中查看Power方案。

好吧,我可能试图在这里举起死人,但我建议确定一台笔记本电脑最可靠的方法是盖子状态开关。 请参阅GetPwrCapabilities和System_power_Capabilities

不需要其他未知检查。

将条件更改为i > 1 && i < 25并记住ChassisTypes是一个数组,其中OS返回他认为您的系统。

可以匹配多种类型。 您的代码仅返回第一个匹配项。

请参阅http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0921.mspx和http://msdn.microsoft.com/en-us/library/aa387204(VS.85).aspx其中说:

本文档源自DMTF发布的CIM类描述。

据推测,这意味着制造商必须为Windows提供一些能够发现它的信息。

我认为没有明确的正确答案,我发现WMI不可靠,但我一直在使用Win32函数GetSystemPowerStatus()来确定是否有系统电池,显然系统电池= =便携式计算机。

我从来没有在带有UPS的桌面上试过这个?!

我很确定这将取决于制造商是否打算在当前的芯片组上提供这些数据。 如果他们没有,那么“其他”是你能做的最好的。

看看这篇有点相关的文章 ,它也建议直接查询BIOS 。

为了检查机器是笔记本电脑还是台式机,您可以尝试使用SystemPowerCapabilites.LidPresent或两者来检查电池状态。

电池:

 if(SystemInformation.PowerStatus.BatteryChargeStatus ==BatteryChargeStatus.NoSystemBattery){ //desktop } else{ //laptop } 

SystemPowerCapabilites.LidPresent:

 public SYSTEM_POWER_CAPABILITIES getSystemPowerCapabilites(){ { SYSTEM_POWER_CAPABILITIES systemPowerCapabilites; GetPwrCapabilities(out systemPowerCapabilites); return systemPowerCapabilites; } getSystemPowerCapabilites().LidPresent; 

GetPwrCapabilities定义: http ://www.pinvoke.net/default.aspx/powrprof/GetPwrCapabilities.html

从HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ pcmcia读取注册表项,“开始”值,如果start = 0,则为笔记本电脑,否则为台式机,如果启动不存在或启动!= 0。