Как проверить тип машины? ноутбук или рабочий стол? - PullRequest
14 голосов
/ 18 июня 2009

Как проверить текущий тип машины? ноутбук или рабочий стол?

Я получил это от http://blog.csdn.net/antimatterworld/archive/2007/11/11/1878710.aspx, он хорошо работает на моей домашней машине (Win2003 на ноутбуке), он возвращает «Portable», но не работает на моей рабочей машине (Vista на ноутбуке), он возвращает «Other» .

вот код:


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 ]

7 голосов
/ 18 июня 2009

Вот хорошая статья 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

А также предлагает поискать в реестре схему питания.

3 голосов
/ 31 августа 2011

Нет необходимости для Другое и Неизвестно чек.

Измените условие на i > 1 && i < 25 и помните, ChassisTypes - это массив, в котором ОС возвращает то, что он думает о вашей системе.

Возможно сопоставить более одного типа. Ваш код возвращает только первое совпадение.

3 голосов
/ 02 февраля 2011

Ну, я, возможно, пытаюсь поднять мертвых здесь, но я бы предположил, что самым надежным методом определения ноутбука был бы подарок переключателя состояния крышки. См. GetPwrCapabilities и System_power_Capabilities

2 голосов
/ 18 июня 2009

Я не думаю, что для этого есть правильный правильный ответ, и я нашел WMI ненадежным, но я использую функцию Win32 GetSystemPowerStatus (), чтобы определить, есть ли системная батарея, очевидно, системная батарея == портативный компьютер.

Я никогда не пробовал это на рабочем столе с ИБП?!

2 голосов
/ 18 июня 2009

См. http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0921.mspx и http://msdn.microsoft.com/en-us/library/aa387204(VS.85).aspx, в которых говорится, что:

Эта документация взята из описаний классов CIM, опубликованных DMTF.

Предположительно, это означает, что производитель должен был предоставить некоторую информацию для Windows, чтобы иметь возможность ее обнаружить.

2 голосов
/ 18 июня 2009

Я вполне уверен, что это будет зависеть от того, удосужился ли производитель предоставить эти данные на текущем чипсете. Если нет, то «Другое» - лучшее, что вы можете сделать.

Ознакомьтесь с этой несколько связанной статьей , которая также предлагает запросить BIOS напрямую .

0 голосов
/ 22 января 2016

Чтобы проверить, является ли компьютер ноутбуком или настольным компьютером, вы можете попробовать проверить состояние батареи, используя 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

0 голосов
/ 13 июля 2009

чтение ключа реестра из HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ pcmcia, значение «Start», это ноутбук, если start = 0, в противном случае это настольный компьютер, если start не существует или не запускается! = 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...