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

时间:2009-06-18 15:27:23

标签: c# wmi

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

我从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;
}

8 个答案:

答案 0 :(得分:7)

这是一篇很好的微软文章,建议查看其他一些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

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

不需要其他未知检查。

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

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

答案 3 :(得分:2)

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

Check out this somewhat related article,也建议querying the BIOS directly

答案 4 :(得分:2)

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

  

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

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

答案 5 :(得分:2)

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

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

答案 6 :(得分:0)

为了检查机器是笔记本电脑还是台式机,您可以尝试使用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

答案 7 :(得分:-3)

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