如何判断是比笔记本还是台式机?
2009-11-05 15:14
645 查看
可以通过WMI读出机器的类型信息加以判断,不过类型太多,什么mini tower。这里介绍一种简单的办法。
笔记本必然有电池设备,即使你把电池卸掉了,也会有直流适配器的设备,我们只需要枚举出所有的hardware id,在其中找有没有"ACPI/ACPI0003"这个ID就行。
具体代码如下
主要参考了 http://support.microsoft.com/kb/259695/的MS的知识库文章。
笔记本必然有电池设备,即使你把电池卸掉了,也会有直流适配器的设备,我们只需要枚举出所有的hardware id,在其中找有没有"ACPI/ACPI0003"这个ID就行。
具体代码如下
#include <stdio.h> #include <windows.h> #include <setupapi.h> #include <devguid.h> #include <regstr.h> int main( int argc, char *argv[ ], char *envp[ ] ) { HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; // Create a HDEVINFO with all present devices. hDevInfo = SetupDiGetClassDevs(NULL, 0, // Enumerator 0, DIGCF_PRESENT | DIGCF_ALLCLASSES ); if (hDevInfo == INVALID_HANDLE_VALUE) { // Insert error handling here. return 1; } // Enumerate through all devices in Set. TCHAR buffer[4096]={0}; DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i, &DeviceInfoData);i++) { DWORD DataT; DWORD buffersize = 4096; // // Call function with null to begin with, // then use the returned buffer size // to Alloc the buffer. Keep calling until // success or an unknown failure. // SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_HARDWAREID, &DataT, (PBYTE)buffer, buffersize, &buffersize); if( wcscmp(buffer, L"ACPI//PNP0000")==0 ) { SetupDiDestroyDeviceInfoList(hDevInfo); printf("It is a laptop/n"); return 1; } } if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS ) { // Insert error handling here. return -1; } // Cleanup SetupDiDestroyDeviceInfoList(hDevInfo); return 0; }
主要参考了 http://support.microsoft.com/kb/259695/的MS的知识库文章。
相关文章推荐
- C# 如何判断计算机类型(台式机还是笔记本)
- C# 如何判断计算机类型(台式机还是笔记本)
- 判断是笔记本还是台式机
- 程序判断用户电脑是笔记本还是台式机
- 利用 ACPI\\ACPI0003设备 判断笔记本还是台式机
- 用vbs实现判断计算机是笔记本还是台式机的代码
- windows编程--如何判断操作系统是64位还是32位
- 如何判断字符串内是中文还是英文
- 如何破解 bluesoleil --- 使蓝牙设备顺利连接台式机、笔记本电脑
- 如何判断一个操作系统是16位还是32位的?不能用sizeof()函数
- 如何机智判断页面是刷新还是关闭,背景:vue项目,需求:关闭页面,下次直接跳到登陆页
- 如何判断一个数为无符号数还是有符号数
- 如何判断IP地址是A类B类还是C类
- js如何判断用户是在PC端和还是移动端访问
- 如何运用onunload事件判断浏览器是刷新还是关闭窗口
- HTML页面如何判断是手机访问还是电脑访问
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
- 如何判断自己IP是内网IP还是外网IP
- 如何判断VPS是基于哪种虚拟技术?Xen、OpenVZ、Xen HVM还是VMware
- 如何禁止KEIL初始化RAM为零& 如何判断是软复位还是上电复位