任平生

任平生

0个粉丝

4

问答

0

专栏

0

资料

任平生  发布于  2020-12-01 12:18:01
采纳率 0%
4个问答
1800

bs网页获取pc硬件信息有什么好的办法

bs网页获取pc硬件信息有什么好的办法
我来回答
回答1个
时间排序
认可量排序

1

0个粉丝

1

问答

16

专栏

6

资料

1 2020-12-04 00:33:49
认可0

(这种方式需要基于COM,使用比较方便,不过我不太喜欢COM)
使用流程(相对固定):
初始化COM:CoInitializeEx(NULL, COINIT_MULTITHREADED)
|
设置COM的安全认证级别
CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
|
获得WMI连接COM接口
CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator,(LPVOID ) &pLoc);
|
通过连接接口连接WMI的内核对象名”ROOT\CIMV2”
pLoc->ConnectServer(_bstr_t(L”ROOT\CIMV2”), NULL, NULL, 0, NULL, 0, 0, &pSvc );
|
设置请求代理的安全级别(请求代理就是一个标识请求发出者的对象,它可以屏蔽实际的通信(例如屏蔽网络通信))
CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE,
NULL, EOAC_NONE);
|
通过请求代理来向WMI发送请求,请求的语法和SQL非常相似,例如查询bios的信息的字符串语句:
“Select from Win32_BIOS”
需要注意的是这个字符串是以BSTR形式保存的,可以通过:
BSTR sql = _bstr_t(“Select from Win32_BIOS”) 来初始化
如果使用CString类,它可以通过成员函数SysAllocString进行转换
如果使用API,可以通过WideCharToMultiByte/MultiByteToWideChar/ConvertBSTRToString等相关函数进行转换
|
获得查询结果的枚举封装接口pEnumClassObject
pSvc->ExecQuery(bsWQL, bsQuery, WBEM_FLAG_RETURN_IMMEDIATELY,NULL, &pEnumClassObject)
|
循环枚举所有的结果对象
pEnumClassObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned)
pClassObject接口映射的是名-值对数组
SAFEARRAY pvNames = NULL;
pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS | WBEM_MASK_CONDITION_ORIGIN, NULL, &pvNames)
|
获取名值数组数目并历遍所有单元
SafeArrayGetLBound(pvNames, 1, &vbl);
SafeArrayGetUBound(pvNames, 1, &vbu);

[循环获取每个单元的信息]
wchar_t *wsName = 0;
VARIANT vValue;
VariantInit(&vValue);
SafeArrayGetElement(pvNames, &aidx, &wsName);//获取名称key值
(这里比较麻烦的是名字值UNICODE形式保存的(如果需要使用MBCS的话都需要自己进行转换))
BSTR bs = SysAllocString(wsName);
pClassObject->Get(bs, 0, &vValue, NULL, 0); //获取名称对应的值
得到的值都是通过VARIANT保存的,用户可以自己格式化它最后的表现形式(特别需要注意的是字符串都是BSTR)

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区