Domanda

Come verificare il tipo di macchina corrente? laptop o desktop?

L'ho preso da http: //blog.csdn. net / antimatterworld / archive / 2007/11/11 / 1878710.aspx , funziona bene sulla mia macchina di casa (Win2003 su laptop), restituisce " Portable " ;, ma fallito su la mia macchina da lavoro (Vista su laptop), restituisce " Altro " ;.

ecco il codice:


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

È stato utile?

Soluzione 8

leggi la chiave di registro da HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ pcmcia, & # 8216; Avvia & # 8217; valore, è laptop se start = 0, altrimenti è una macchina desktop se start non esiste o start! = 0.

Altri suggerimenti

Ecco un buon articolo di Microsoft che suggerisce di esaminare alcune altre classi WMI per avere un'idea più chiara del fatto che il computer sia un laptop o un 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 suggerisce anche di cercare nel registro lo schema di alimentazione.

Bene, potrei tentare di risuscitare i morti qui, ma suggerirei che il metodo più affidabile per determinare un laptop sarebbe il presente di un interruttore di stato del coperchio. Vedi GetPwrCapabilities e System_power_Capabilities

Non è necessario il controllo Altro e Sconosciuto .

Cambia la condizione in i > 1 && i < 25 e ricorda che ChassisTypes è un array in cui il sistema operativo restituisce qualunque cosa egli pensi che sia il tuo sistema.

È possibile abbinare più di un singolo tipo. Il tuo codice restituisce solo la prima corrispondenza.

Vedi http://www.microsoft.com/ technet / scriptcenter / resources / qanda / sept04 / hey0921.mspx e http://msdn.microsoft.com/en-us/library/aa387204 (VS.85) .aspx che afferma che:

  

Questa documentazione deriva dalle descrizioni delle classi CIM pubblicate dal DMTF.

Presumibilmente, ciò significa che il produttore ha dovuto fornire alcune informazioni a Windows per poterle scoprire.

Non penso che ci sia una risposta giusta definitiva per questo e ho trovato WMI inaffidabile per questo, ma ho usato la funzione Win32 GetSystemPowerStatus () per determinare se c'è una batteria di sistema, ovviamente batteria di sistema == computer portatile.

Non l'ho mai provato su un desktop con un UPS ?!

Sono abbastanza sicuro che questo dipenderà dal fatto che il produttore si sia preoccupato di fornire tali dati sul chipset corrente. In caso contrario, & Quot; Altro & Quot; è il meglio che puoi fare.

Dai un'occhiata a questo articolo in qualche modo correlato , che suggerisce anche interrogare direttamente il BIOS .

Per verificare se la macchina è laptop o desktop, puoi provare a controllare lo stato della batteria, utilizzando SystemPowerCapabilites.LidPresent o entrambi.

batteria:

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;

Definizione di GetPwrCapabilities: http://www.pinvoke.net/default.aspx /powrprof/GetPwrCapabilities.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top