Como verificar o tipo de máquina? laptop ou desktop?
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;
}
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