一个获取电脑显示器序列号的VBS脚本

“获取电脑显示器序列号”,这个任务通过反复尝试完成了。可惜,没法用,产品提的需求是获取显示器背后的标签上的序列号。我只听到“序列号”就信心满满的开工了。教训惨重。把这段脚本分享出来,希望能帮到谁。通过EDID信息,获取电脑显示器序列号,并输出到文件中。

Dim strComputer, objWMIService, colItems, objItem
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\"  & strComputer & "\root\wmi") 

Set colItems = objWMIService.ExecQuery   ("SELECT * FROM WMIMonitorID")


strKeys=""
For Each objItem In colItems
  strResult = objItem.InstanceName
  strResult = Left(strResult,Len(strResult)-2)
  strKeys = strKeys & strResult & vbcrlf
Next

'Wscript.Echo strKeys

dim fso, f
set fso = CreateObject("Scripting.FileSystemObject")
set f = fso.CreateTextFile("sn-path.txt", true) '第二个参数表示目标文件存在时是否覆盖
f.Write(strKeys)
f.Close()
set f = nothing
set fso = nothing

我电脑上运行结果:
DISPLAY\LEN40A0\4&2a430760&0&UID265988
DISPLAY\LEN61AB\4&2a430760&0&UID65793

教训: 相同的字词,在不同人的大脑里,浮现的含义并不相同。这是产生沟通障碍的原因之一。《定位:有史以来对美国营销影响最大的观念》,这书中提到的道理跟这件事类似。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我不是专业的编程专家,所以我不能给你准确的答案。但是你可以参考这个网站上的代码:http://www.codeproject.com/Articles/857252/Getting-the-CPU-serial-number-in-Cplusplus。 ### 回答2: 获取CPU序列号可以通过调用操作系统提供的接口来实现,在C语言中可以使用以下步骤来完成: 1. 包含头文件:首先需要包含相关的头文件,例如windows.h或unistd.h等,以便能够使用系统提供的函数和数据结构。 2. 定义变量:定义一个字符数组变量来存储获取到的CPU序列号,如char cpuSerialNumber[20]。 3. 调用系统函数:通过调用相应的系统接口函数,例如在Windows中可以使用WMI(Windows Management Instrumentation)来获取CPU序列号,可以调用GetSystemInfo函数等。在Linux中可以使用/proc/cpuinfo文件来获取CPU信息,可以使用fgets函数读取文件内容。 4. 处理数据:根据具体的获取方式和返回结果,对获取到的CPU序列号进行相应的处理和解析,例如从字符串中提取出序列号部分,并转换为所需的格式。 5. 输出结果:将获取到的CPU序列号打印输出或存储到指定的文件中,例如使用printf函数将序列号输出到控制台。 以下是一个示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { // 定义CPU序列号变量 char cpuSerialNumber[20]; // 执行操作系统相关的代码,获取CPU序列号 // 以下示例代码仅作范例,实际实现需要根据操作系统和具体接口进行调用和处理 // 假设使用Windows系统,调用GetSystemInfo函数获取序列号 // Windows下获取CPU序列号的代码代码仅仅是个示例 // 实际情况必须根据具体系统和API进行调用和处理 #ifdef _WIN32 // 调用相关API获取CPU序列号 // 以下是一个示例,具体实现需要根据系统和API进行调用和处理 // 此示例代码仅供参考,实际情况请根据具体情况修改 // 示例中的代码可能会有错误,请酌情处理 char* sn; __asm{ mov eax, 1 xor ebx, ebx xor ecx, ecx xor edx, edx cpuid mov sn, edx } sprintf(cpuSerialNumber, "%08X", sn); #elif __linux__ // 调用相关API获取CPU序列号 // 以下是一个示例,具体实现需要根据系统和API进行调用和处理 // 此示例代码仅供参考,实际情况请根据具体情况修改 // 示例中的代码可能会有错误,请酌情处理 FILE *fp; char line[128]; fp = fopen("/proc/cpuinfo", "r"); while (fgets(line, 128, fp) != NULL) { // 判断是否是包含序列号的行 if (strncmp(line, "serial", 6) == 0) { strcpy(cpuSerialNumber, strchr(line, ':') + 2); break; } } fclose(fp); #endif // 输出结果 printf("CPU序列号:%s\n", cpuSerialNumber); return 0; } ``` 请注意,以上代码仅仅是示例代码,实际情况需要根据具体系统和API进行调用和处理,具体的实现方式可能因操作系统、编译器、硬件等因素的不同而有所差异,请酌情调整和修改。 ### 回答3: 获取CPU序列号一个较为复杂和底层的操作,本身C语言并不直接提供获取CPU序列号的函数或API。要实现获取CPU序列号的功能,可以借助操作系统提供的相关接口。 在Windows操作系统下,可以使用Windows Management Instrumentation (WMI) 的API来获取CPU序列号。以下是一个示例代码: ```c #include <stdio.h> #include <Windows.h> #include <wbemidl.h> #pragma comment(lib, "wbemuuid.lib") int main(void) { HRESULT hres; // 初始化COM库 hres = CoInitializeEx(0, COINIT_MULTITHREADED); if (FAILED(hres)) { printf("Failed to initialize COM library. Error code: %lx\n", hres); return 1; } // 创建IWbemLocator对象 IWbemLocator *pLoc = NULL; hres = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc); if (FAILED(hres)) { printf("Failed to create IWbemLocator object. Error code: %lx\n", hres); CoUninitialize(); return 1; } // 使用IWbemLocator对象连接WMI IWbemServices *pSvc = NULL; hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc); if (FAILED(hres)) { printf("Could not connect to WMI. Error code: %lx\n", hres); pLoc->Release(); CoUninitialize(); return 1; } // 设置连接认证级别 hres = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE); if (FAILED(hres)) { printf("Could not set proxy blanket. Error code: %lx\n", hres); pSvc->Release(); pLoc->Release(); CoUninitialize(); return 1; } // 执行WMI查询 IEnumWbemClassObject* pEnumerator = NULL; hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_Processor"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); if (FAILED(hres)) { printf("Could not execute WQL query. Error code: %lx\n", hres); pSvc->Release(); pLoc->Release(); CoUninitialize(); return 1; } // 获取查询结果 IWbemClassObject *pclsObj = NULL; ULONG uReturn = 0; while (pEnumerator) { hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if (uReturn == 0) { break; } VARIANT vtProp; hres = pclsObj->Get(L"ProcessorId", 0, &vtProp, 0, 0); if (FAILED(hres)) { printf("Failed to get ProcessorId. Error code: %lx\n", hres); } else { printf("CPU序列号: %ws\n", vtProp.bstrVal); VariantClear(&vtProp); } pclsObj->Release(); } // 释放资源 pSvc->Release(); pLoc->Release(); pEnumerator->Release(); CoUninitialize(); return 0; } ``` 需要注意的是,以上代码仅适用于Windows操作系统,并且需要在编译时链接`wbemuuid.lib`库文件。在Linux或其他操作系统中,获取CPU序列号的方法可能不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值