문제

현재 기계 유형을 확인하는 방법? 노트북 또는 데스크탑?

나는 이것을 얻었다 http://blog.csdn.net/antimatterworld/archive/2007/11/11/1878710.aspx , 그것은 내 홈 머신 (랩톱에서 Win2003)에서 잘 작동하고 "휴대용"을 반환하지만 작업 기계 (랩톱의 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;
}

도움이 되었습니까?

해결책 8

hkey_local_machine system currentControlset Services pcmcia, 'start'값, 시작 = 0 인 경우 랩톱입니다. 그렇지 않으면 START가 존재하지 않거나 시작하지 않으면 랩톱입니다! = 0에서 레지스트리 키를 읽으십시오.

다른 팁

다음은 컴퓨터가 랩톱인지 데스크탑인지에 대한 더 나은 아이디어를 얻기 위해 몇 가지 다른 WMI 클래스를 살펴 보는 좋은 Microsoft 기사입니다.
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 OS가 자신의 시스템이 생각하는 것을 반환하는 배열입니다.

단일 유형보다 더 일치 할 수 있습니다. 코드는 첫 번째 일치 만 반환합니다.

보다 http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0921.mspx 그리고 http://msdn.microsoft.com/en-us/library/a387204(vs.85).aspx 이를 말하면 :

이 문서는 DMTF에서 게시 한 CIM 클래스 설명에서 파생됩니다.

아마도, 그것은 제조업체가 Windows에 정보를 발견 할 수 있도록 일부 정보를 제공해야한다는 것을 의미합니다.

나는 이것에 대한 명확한 정답이 있다고 생각하지 않으며 WMI가 그것에 대해 신뢰할 수없는 것을 발견했지만 Win32 기능 getSystempOwerstatus ()를 사용하여 시스템 배터리가 있는지, 분명히 시스템 배터리 == 휴대용 컴퓨터가 있는지 확인했습니다.

나는 UPS와 함께 데스크탑에서 이것을 시도한 적이 없습니까?!

이것이 제조업체가 현재 칩셋에 해당 데이터를 제공하기 위해 귀찮게했는지 여부에 달려 있다고 확신합니다. 그렇지 않다면 "기타"가 최선을 다할 수 있습니다.

이 다소 관련된 기사를 확인하십시오, 또한 제안합니다 바이오스를 직접 쿼리합니다.

기계가 노트북인지 데스크탑인지 확인하려면 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;

getpwrcapability 정의 : http://www.pinvoke.net/default.aspx/powrprof/getpwrcapabilities.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top