Pergunta

Como verificar o tipo de máquina atual? laptop ou desktop?

Eu tenho esse de http: //blog.csdn. net / antimatterworld / Arquivo / 2007/11/11 / 1878710.aspx , ele funciona bem em minha máquina de casa (Win2003 no laptop), ele retorna "portátil", mas falhou na minha máquina de trabalho (Vista no laptop) , ele retorna "Outros".

aqui está o código:


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

Foi útil?

Solução 8

Leia chave do registro de HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ PCMCIA, o valor ‘Start’, é laptop se start = 0, caso contrário, máquina desktop, se início não existe ou começar! = 0.

Outras dicas

Aqui está um bom artigo Microsoft que sugere olhar para algumas outras classes WMI para obter uma melhor idéia de se o computador for um laptop ou desktop:
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

E também sugere para olhar no Registro para o esquema de energia.

Bem, eu pode estar tentando ressuscitar os mortos aqui, mas gostaria de sugerir que o método mais confiável de determinar um laptop seria o presente de um interruptor de estado tampa. Consulte GetPwrCapabilities e System_power_Capabilities

Não há necessidade de tanto Outros e Desconhecido cheque.

Alterar a condição de i > 1 && i < 25 e lembre-se ChassisTypes é um array onde OS retornos que sempre que ele acha que seu sistema é.

É possível combinar mais de único tipo. Seu código retorna apenas o primeiro jogo.

http://www.microsoft.com/ TechNet / ScriptCenter / recursos / QandA / sept04 / hey0921.mspx e http://msdn.microsoft.com/en-us/library/aa387204 (VS.85) .aspx que estabelece que:

Esta documentação é derivado das descrições de classe CIM publicados pelo DMTF.

Presumivelmente, isso significa que o fabricante teve que fornecer algumas informações para o Windows para ser capaz de descobri-lo.

Eu não acho que há uma resposta certa definitiva para isso e eu encontrei WMI não confiável para ele, mas tenho vindo a utilizar a função Win32 GetSystemPowerStatus () para determinar se há uma bateria do sistema, obviamente bateria do sistema == computador portátil.

Eu nunca tentei isso em um desktop com uma UPS embora?!

Tenho a certeza de que isso vai depender se o fabricante se preocupou em estabelecer que os dados sobre o chipset atual. Se eles não têm, em seguida, "Outros" é o melhor que você pode fazer.

Confira este artigo algo relacionado, que também sugere consulta o BIOS directamente .

A fim de verificar se a máquina é portátil ou desktop você pode tentar verificar o estado da bateria, usando SystemPowerCapabilites.LidPresent ou ambos.

bateria:

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;

definição GetPwrCapabilities: http://www.pinvoke.net/default.aspx /powrprof/GetPwrCapabilities.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top