【问题标题】:How to check the machine type? laptop or desktop?如何检查机器类型?笔记本电脑还是台式机?
【发布时间】:2010-11-04 01:01:53
【问题描述】:

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

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

【问题讨论】:

  • 有趣。你想达到什么目的?您是否只是想确定该机器是否可能在办公室外使用?
  • 我支持 John Saunders:您想要实现什么目标?有一种可靠的方法可以检查机器是否使用电池运行 - 您是否希望通过询问笔记本电脑来发现这一点?
  • 没有可靠的指标来确定系统的外形尺寸;此外,在给定任何特定指标的情况下,您无法确定未来的外形尺寸可能“看起来”像当前的笔记本电脑设备。这里真正的问题是为什么你的代码运行的系统的外形因素很重要?

标签: c# wmi


【解决方案1】:

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

Check out this somewhat related article,也暗示querying the BIOS directly

【讨论】:

    【解决方案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 能够发现它。

    【讨论】:

      【解决方案3】:

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

      我从来没有在带 UPS 的台式机上尝试过这个?!

      【讨论】:

        【解决方案4】:

        这是一篇不错的 Microsoft 文章,建议查看其他一些 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
        

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 我在 VAIO VPCCW2DGX/B 上使用 windows 7 Professional,起始值为 3 !!这个答案不准确。
          • 如果我的笔记本电脑没有 PCMCIA 怎么办?还是我的超薄桌面呢?
          • 我的台式机系统有一个 PCMCIA PCI 卡 - 这使它成为笔记本电脑吗?
          【解决方案6】:

          好吧,我可能会在这里尝试使死者复活,但我建议确定笔记本电脑的最可靠方法是提供盖子状态开关。 见GetPwrCapabilitiesSystem_power_Capabilities

          【讨论】:

          • 也许不是最好的,但肯定是对您的舰队进行测试的一个很好的提示......避免 WMI 混乱。谢谢你
          • 避免 WMI 的最佳答案。
          【解决方案7】:

          OtherUnknown都不需要检查。

          将条件更改为i &gt; 1 &amp;&amp; i &lt; 25 并记住ChassisTypes 是一个数组,操作系统会在其中返回他认为您的系统是什么。

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-01-14
              • 1970-01-01
              • 2014-08-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-25
              相关资源
              最近更新 更多