2009-06-18 7 views
14

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

Je l'ai eu de http://blog.csdn.net/antimatterworld/archive/2007/11/11/1878710.aspx, ça marche bien sur ma machine à la maison (Win2003 sur ordinateur portable), elle renvoie "Portable", mais échoué sur mon ordinateur de travail (Vista sur ordinateur portable), elle renvoie "Autre".

est le code ici:


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

Intéressant. Qu'est-ce que vous essayez d'accomplir? Essayez-vous simplement de déterminer si la machine est susceptible d'être utilisée à l'extérieur du bureau? –

+0

Je suis avec John Saunders: qu'essayez-vous d'accomplir? Il existe un moyen fiable de vérifier si la machine fonctionne sur une batterie - est-ce ce que vous espérez trouver en demandant un ordinateur portable ou non? –

+4

Il n'y a pas de mesure fiable pour déterminer quel est le facteur de forme d'un système; de plus, vous n'avez aucun moyen de déterminer quels facteurs de forme futurs pourraient éventuellement ressembler à un appareil portable actuel en raison de mesures spécifiques. La vraie question ici est pourquoi diable est le facteur de forme du système que votre code fonctionne sur important? –

Répondre

-3

lecture clé de Registre HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ pcmcia, la valeur 'Start', il est un ordinateur portable si start = 0, sinon il est machine de bureau si le démarrage n'existe pas ou commencer! = 0.

+0

J'utilise Windows 7 Professionnel sur VAIO VPCCW2DGX/B et la valeur de départ est 3 !! cette réponse n'est pas exacte. –

+1

Que faire si mon ordinateur portable n'a pas PCMCIA? Ou mon bureau slim-line? –

+1

Mon système de bureau a une carte PCMCIA PCI - est-ce que cela en fait un ordinateur portable? –

2

Je ne pense pas qu'il existe une bonne réponse pour cela et j'ai trouvé WMI peu fiable pour cela, mais j'ai utilisé la fonction Win32 GetSystemPowerStatus() pour déterminer s'il y a une batterie du système, évidemment la batterie du système = = ordinateur portable.

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

7

est ici un bon article Microsoft qui suggère regarder quelques autres classes WMI pour obtenir une meilleure idée de savoir si l'ordinateur est un ordinateur portable ou 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 aussi de regarder dans le registre pour le régime de pouvoir.

3

Eh bien, je tente peut-être d'élever les morts ici, mais je dirais que la méthode la plus fiable pour déterminer un ordinateur portable serait le présent d'un interrupteur d'état du couvercle. Voir GetPwrCapabilities et System_power_Capabilities

3

Il n'y a pas besoin à la fois Autres et Unknown chèque.

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

Il est possible de faire correspondre plus qu'un type unique. Votre code ne renvoie que le premier match.

0

Afin de vérifier si la machine 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; 

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