2009-06-18 36 views
14

Làm cách nào để kiểm tra loại máy hiện tại? máy tính xách tay hoặc máy tính để bàn?Làm thế nào để kiểm tra loại máy? máy tính xách tay hoặc máy tính để bàn?

Tôi nhận được điều này từ http://blog.csdn.net/antimatterworld/archive/2007/11/11/1878710.aspx, nó hoạt động tốt trên máy tính gia đình của tôi (Win2003 trên máy tính xách tay), nó trả về "Portable", nhưng không thành công trên máy tính của tôi (Vista trên máy tính xách tay), nó trả về "Khác".

đây là mã:


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; 
} 
 
+4

Thú vị. Bạn đang cố gắng để thực hiện? Bạn chỉ đang cố gắng xác định xem máy có khả năng được sử dụng bên ngoài văn phòng không? –

+0

Tôi với John Saunders: bạn đang cố gắng đạt được điều gì? Có một cách đáng tin cậy để kiểm tra xem máy có đang chạy bằng pin không - đó có phải là những gì bạn đang hy vọng tìm ra bằng cách hỏi máy tính xách tay hay không? –

+4

Không có số liệu đáng tin cậy để xác định hệ số dạng nào là hệ thống; hơn nữa, bạn không có cách nào để xác định những yếu tố hình thức tương lai có thể có thể 'nhìn' như một thiết bị máy tính xách tay hiện tại cho bất kỳ số liệu cụ thể nào. Câu hỏi thực sự ở đây là tại sao trên trái đất là yếu tố hình thức của hệ thống mã của bạn đang chạy trên quan trọng? –

Trả lời

-3

đọc khóa registry từ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ pcmcia, 'Bắt ​​đầu' giá trị, đó là máy tính xách tay nếu start = 0, nếu không nó là máy tính để bàn nếu bắt đầu không tồn tại hoặc bắt đầu! = 0.

+0

Tôi đang sử dụng windows 7 Professional trên VAIO VPCCW2DGX/B và giá trị bắt đầu là 3 !! câu trả lời này không chính xác. –

+1

Nếu máy tính xách tay của tôi không có PCMCIA thì sao? Hoặc máy tính để bàn mỏng của tôi có hoạt động không? –

+1

Hệ thống máy tính để bàn của tôi có thẻ PCI PCMCIA - điều đó có làm cho nó trở thành Máy tính xách tay không? –

2

Tôi không nghĩ rằng có một câu trả lời chính xác cho điều này và tôi đã tìm thấy WMI không đáng tin cậy cho nó nhưng tôi đã sử dụng chức năng Win32 GetSystemPowerStatus() để xác định xem có pin hệ thống hay không, rõ ràng là pin hệ thống = = máy tính xách tay.

Tôi chưa bao giờ thử trên máy tính để bàn với UPS mặc dù ?!

7

Dưới đây là một bài viết Microsoft tốt mà đề nghị xem xét một vài lớp WMI khác để có được một ý tưởng tốt hơn về việc liệu máy tính là một máy tính xách tay hoặc máy tính để bàn:
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 

Và nó cũng gợi ý để tìm kiếm trong sổ đăng ký cho sơ đồ Power.

3

Vâng, tôi có thể cố gắng để nâng người chết ở đây, nhưng tôi sẽ đề nghị rằng phương pháp đáng tin cậy nhất để xác định một máy tính xách tay sẽ là hiện tại của một chuyển đổi trạng thái nắp. Xem GetPwrCapabilitiesSystem_power_Capabilities

3

Không cần phải cho cả khácUnknown séc.

Thay đổi điều kiện thành i > 1 && i < 25 và nhớ ChassisTypes là một mảng mà hệ điều hành trả về những gì anh nghĩ hệ thống của bạn.

Có thể khớp nhiều hơn một loại. Mã của bạn chỉ trả về kết quả khớp đầu tiên.

0

Để kiểm tra xem máy có phải là máy tính xách tay hay máy tính để bàn, bạn có thể thử kiểm tra trạng thái pin, sử dụng SystemPowerCapabilites.LidPresent hoặc cả hai.

Pin:

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 định nghĩa: http://www.pinvoke.net/default.aspx/powrprof/GetPwrCapabilities.html

Các vấn đề liên quan