노트북인지 데스크탑인지 알아내는 방법
(누구냐, 넌?!)


Intro

 간혹 현재 PC 가 노트북인지, 데스크탑인지 알아야 할 때가 있습니다. 예를 들면, PC 의 타입에 따라 아이콘 모양을 다르게 한다거나 동작을 다르게 해야 할 경우죠. 그런데 이런 하드웨어적인 속성을 알아 낼 수 있을까요? 소프트웨어적인 방법으로 하드웨어 속성을 알아낸다? 가능한지 여부조차 알기 어렵습니다.

 하지만! 가능합니다. 대부분 이런 하드웨어적인 속성이나 값은 WMI(Windows Management Instrumentation) 을 이용하면 알 수 있습니다. 예를 들어, 무선인터넷의 신호세기도 알아 낼 수 있죠.


Content

http://download.microsoft.com 에서 "wmi creator" 라고 검색하면 아래와 같은 매우 편리한 툴을 받으실 수 있습니다. 사용법은 매우매우 간단하니 쉽게 사용하실 수 있을 것입니다. 참고로 랭귀지 별로 코드도 자동 생성해 준답니다.



노트북인지 데스크탑인지 그 이외의 기기인지 알아내는 코드는 아래와 같습니다.


using System.Management;

public class CrystalCube
{
    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 GetChassisType() {
        try {
            ManagementClass systemEnclosures = new ManagementClass("Win32_SystemEnclosure");
            foreach (ManagementObject obj in systemEnclosures.GetInstances()) {
                foreach (int index in (System.UInt16[])obj.GetPropertyValue("ChassisTypes")) {
                    return (ChassisTypes)index;
                }
            }
            return ChassisTypes.Unknown;
        } catch {
            return ChassisTypes.Unknown;
        }
    }
}



 간단하죠? 참 System.Management 는 기본적으로 참조되지 않기 때문에, 반드시 추가적으로 참조시켜 주어야 한답니다. 자세한(?) 내용은 MSDN 을 통해 보실 수 있습니다.
http://msdn.microsoft.com/en-us/library/aa394474(VS.85).aspx



Epilogue

 그 이외에 하드웨어적인 혹은 애매한 것들은 "WMI" 라는 키워드와 함께 검색해보시면, 의외의 좋은 검색결과를 얻으 실 수 있을 겁니다. 아니면 말고요~ㅋ