Ответ 1
прочитать раздел реестра из HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pcmcia, "Начальное значение, это ноутбук, если start = 0, в противном случае это настольная машина, если запуск не существует или не запускается!= 0.
Как проверить текущий тип машины? ноутбук или рабочий стол?
Я получил это от http://blog.csdn.net/antimatterworld/archive/2007/11/11/1878710.aspx, он хорошо работает на моей домашней машине (Win2003 на ноутбуке), он возвращает "Portable", но не удалось на моем рабочем компьютере (Vista на ноутбуке), он возвращает "Другое".
вот код:
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;
}
прочитать раздел реестра из HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pcmcia, "Начальное значение, это ноутбук, если start = 0, в противном случае это настольная машина, если запуск не существует или не запускается!= 0.
Здесь хорошая статья Microsoft, в которой предлагается взглянуть на несколько других классов WMI, чтобы лучше понять, является ли компьютер ноутбуком или рабочим столом:
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
И также предлагает посмотреть в реестре схему питания.
Ну, я, возможно, пытаюсь поднять мертвых здесь, но я бы предположил, что самым надежным методом определения ноутбука будет подарок переключателя статуса крышки. См. GetPwrCapabilities и System_power_Capabilities
Нет необходимости в проверке Другие и Неизвестно.
Измените условие на i > 1 && i < 25
и запомните ChassisTypes
- это массив, в котором ОС возвращает то, что он думает о вашей системе.
Можно сопоставить более одного типа. Ваш код возвращает только первое совпадение.
Я уверен, что это будет зависеть от того, беспокоит ли производитель предоставление данных на текущем наборе микросхем. Если они этого не сделали, тогда "Другое" - лучшее, что вы можете сделать.
Ознакомьтесь с этой несколько связанной статьей, в которой также предлагается запрос непосредственно в BIOS.
См. http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0921.mspx и http://msdn.microsoft.com/en-us/library/aa387204(VS.85).aspx, который гласит, что:
Эта документация получена из описаний классов CIM, опубликованных DMTF.
Предположительно, это означает, что изготовитель должен был предоставить некоторую информацию для Windows, чтобы иметь возможность ее обнаружить.
Я не думаю, что для этого есть окончательный правильный ответ, и я нашел WMI ненадежным для него, но я использовал функцию GetSystemPowerStatus() Win32, чтобы определить, есть ли системная батарея, очевидно, системная батарея == портативный компьютер.
Я никогда не пробовал это на рабочем столе с ИБП, хотя?!
Чтобы проверить, что компьютер - ноутбук или настольный компьютер, вы можете проверить состояние батареи, используя SystemPowerCapabilites.LidPresent или оба из них.
Батарея:
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: http://www.pinvoke.net/default.aspx/powrprof/GetPwrCapabilities.html