如何检查机器类型? 笔记本电脑或台式机?(How to check the machine ty

2019-06-23 14:00发布

如何检查当前计算机类型? 笔记本电脑或台式机?

我得到这个从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;
}

Answer 1:

下面是建议看一些其他的WMI类得到的计算机是一台笔记本电脑或台式机更好的主意了良好的Microsoft文章:
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

而这也表明在注册表中的电源使用方案看。



Answer 2:

好吧,我可能会尝试在这里提死,但我会建议确定一台笔记本电脑的最可靠的方法将是一个盖状态切换的存在。 见GetPwrCapabilities和System_power_Capabilities



Answer 3:

没有必要对其他的都和未知的检查。

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

它可以搭配比单一类型多。 您的代码只返回第一个匹配。



Answer 4:

见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能够发现它。



Answer 5:

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

我从来没有试过这种用UPS虽然在桌面上?



Answer 6:

我敢肯定,这将取决于制造商是否已经不屑于提供关于当前芯片组的数据。 如果他们没有,那么“其他”是你能做的最好的。

看看这个有点相关的文章 ,这也表明直接查询BIOS 。



Answer 7:

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



Answer 8:

读取HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务的注册表项\ PCMCIA,在“开始”值,它的笔记本电脑,如果启动= 0,否则它的台式机,如果启动不存在或开始!= 0。



文章来源: How to check the machine type? laptop or desktop?
标签: c# wmi