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

14

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

Я получил это от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;
}

я с Джоном Сондерсом: чего ты пытаешься достичь? Существует надежный способ проверить, работает ли устройство от батареи - вы это надеетесь выяснить, спросив ноутбук или нет? Ian Boyd
Интересно. Что вы пытаетесь достичь? Вы просто пытаетесь определить, будет ли аппарат использоваться вне офиса? John Saunders
Не существует надежной метрики для определения того, что такое форм-фактор системы; более того, у вас нет возможности определить, какие будущие форм-факторы могли бы «выглядеть». как текущее устройство для ноутбука с учетом каких-либо конкретных показателей. Реальный вопрос здесь заключается в том, почему на земле важен форм-фактор системы, в которой работает ваш код? Ed Courtenay

Ваш Ответ

8   ответов
2

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

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

2

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

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

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

в которой предлагается взглянуть на несколько других классов 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

Other а такжеUnknown проверять.

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

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

3

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

2

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

This documentation is derived from the CIM class descriptions published by the DMTF.

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

-3

\ Services \ pcmcia, & # x2018; Start & # x2019; значение, это ноутбук, если start = 0, в противном случае это настольный компьютер, если start не существует или start! = 0.

Моя настольная система имеет PCI-карту PCMCIA - это делает ее ноутбуком?
Я использую Windows 7 Professional на VAIO VPCCW2DGX / B, и начальное значение равно 3 !! этот ответ не точен.
Что если в моем ноутбуке нет PCMCIA? Или мой тонкий рабочий стол делает?

Похожие вопросы