Comment vérifier le type de machine? ordinateur portable ou de bureau?

StackOverflow https://stackoverflow.com/questions/1013354

  •  06-07-2019
  •  | 
  •  

Question

Comment vérifier le type de machine actuel? ordinateur portable ou de bureau?

Je viens de http: //blog.csdn. net / antimatterworld / archive / 2007/11/11 / 1878710.aspx , cela fonctionne bien sur mon ordinateur personnel (Win2003 sur un ordinateur portable), il retourne & "Portable &"; mais a échoué le ma machine de travail (Vista sur ordinateur portable), il retourne & "Autre &";.

voici le code:


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

Était-ce utile?

La solution 8

Lire la clé de registre dans HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ pcmcia, le & # 8216; Démarrer & # 8217; valeur, c’est ordinateur portable si start = 0, sinon c’est la machine de bureau si start n’existe pas ou démarre! = 0.

Autres conseils

Voici un bon article de Microsoft qui suggère de regarder quelques autres classes WMI pour avoir une meilleure idée de savoir si l'ordinateur est un ordinateur portable ou un ordinateur de bureau:
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

Et il suggère également de rechercher dans le registre le schéma d'alimentation.

Eh bien, je tente peut-être de ressusciter les morts ici, mais je suggérerais que la méthode la plus fiable pour déterminer un ordinateur portable serait le changement de statut actuel. Voir GetPwrCapabilities et System_power_Capabilities

Les autres et les inconnus contrôles ne sont pas nécessaires.

Modifiez la condition en i > 1 && i < 25 et rappelez-vous. ChassisTypes est un tableau dans lequel le système d'exploitation renvoie ce qu'il pense de votre système.

Il est possible de faire correspondre plus d'un type unique. Votre code ne renvoie que la première correspondance.

Voir http://www.microsoft.com/ technet / scriptcenter / resources / qanda / sept04 / hey0921.mspx et http://msdn.microsoft.com/en-us/library/aa387204 (VS.85) .aspx qui indique que:

  

Cette documentation est dérivée des descriptions de classe CIM publiées par le DMTF.

Cela signifie vraisemblablement que le fabricant devait fournir certaines informations à Windows pour pouvoir le découvrir.

Je ne pense pas qu'il existe une bonne réponse définitive à ce problème et j'ai trouvé que WMI n'était pas fiable, mais j'utilise la fonction Win32 GetSystemPowerStatus () pour déterminer s'il existe une batterie système, bien sûr une batterie système == ordinateur portable.

Je n’ai jamais essayé cela sur un ordinateur de bureau avec un onduleur?!

Je suis à peu près sûr que cela dépendra de savoir si le fabricant s'est donné la peine de fournir ces données sur le chipset actuel. Si ce n’est pas le cas, alors & "Autre &"; est le mieux que vous puissiez faire.

Consultez cet article quelque peu connexe , qui suggère également d'interroger directement le BIOS . / p>

Pour vérifier si l'ordinateur est un ordinateur portable ou de bureau, vous pouvez essayer de vérifier l'état de la batterie en utilisant SystemPowerCapabilites.LidPresent ou les deux.

Batterie:

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;

Définition de GetPwrCapabilities: http://www.pinvoke.net/default.aspx /powrprof/GetPwrCapabilities.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top