マシンタイプを確認するにはどうすればいいですか?ラップトップまたはデスクトップ?

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

  •  06-07-2019
  •  | 
  •  

質問

現在のマシンタイプを確認するには?ラップトップまたはデスクトップ?

http://blog.csdnから取得しました。 net / antimatterworld / archive / 2007/11/11 / 1878710.aspx 、自宅のマシン(ラップトップではWin2003)で正常に動作し、<!> quot; Portable <!> quot;を返しますが、失敗しました私の仕事用マシン(ラップトップ上のVista)、<!> quot; Other <!> quot;を返します。

コードは次のとおりです:


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、<!>#8216; Start <!>#8217;からレジストリキーを読み取ります。値、start = 0の場合はラップトップ、それ以外の場合はstartが存在しないか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

また、Powerスキームのレジストリを調べることをお勧めします。

まあ、私はここで死者を上げようとしているかもしれませんが、ラップトップを決定する最も信頼できる方法は蓋の状態スイッチの存在であることをお勧めします。 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/aa387204(VS.85).aspx には次のように記載されています。

  

このドキュメントは、DMTFによって公開されたCIMクラスの説明から派生しています。

おそらく、それは製造元がWindowsがそれを発見できるようにするために何らかの情報を提供しなければならなかったことを意味します。

これに決定的な正しい答えがあるとは思わないし、WMIが信頼できないと感じたが、Win32関数GetSystemPowerStatus()を使用して、システムバッテリー、明らかにシステムバッテリー==携帯型コンピューター。

UPSを搭載したデスクトップでこれを試したことはありませんか?!

これは、メーカーが現在のチップセットでそのデータを提供することに煩わされているかどうかに依存していると確信しています。そうでない場合は、<!> quot;その他<!> quot;できる限り最高です。

このやや関連する記事をご覧ください。また、 BIOSを直接照会することも提案します。

マシンがラップトップかデスクトップかを確認するには、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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top