当前位置: 首页 > news >正文

部门网站开发深圳网站建设服务平台

部门网站开发,深圳网站建设服务平台,厦门seo培训,莱州网站建设公司电话Windows Management Instrumentation#xff08;WMI#xff09;是一种用于管理和监视Windows操作系统的框架。它为开发人员、系统管理员和自动化工具提供了一种标准的接口#xff0c;通过这个接口#xff0c;可以获取有关计算机系统硬件、操作系统和应用程序的信息#xf…Windows Management InstrumentationWMI是一种用于管理和监视Windows操作系统的框架。它为开发人员、系统管理员和自动化工具提供了一种标准的接口通过这个接口可以获取有关计算机系统硬件、操作系统和应用程序的信息以及对系统进行管理和控制的能力。 WMI允许通过编程方式查询系统信息、监视性能、执行管理任务等。它提供了一种统一的方式来访问和管理Windows操作系统的各个方面而无需了解底层实现细节。通过WMI可以使用各种编程语言如C#、VBScript、PowerShell等来执行诸如查询系统信息、监控性能、配置系统设置等任务。 当需要通过WMI编程提取参数时我们就需要使用WQLWindows Management Instrumentation Query Language它是一种查询语言专门用于查询Windows Management Instrumentation (WMI)数据。WMI 是Windows操作系统中用于管理和监视的框架而WQL则是用于与WMI进行交互的查询语言。 查询分析器下载https://download.csdn.net/download/lyshark_csdn/87950095 WQL 的语法类似于 SQLStructured Query Language使用WQL可以执行各种查询来检索关于计算机系统、硬件、软件和其他管理信息的数据。这些查询可以用于编写脚本、管理任务、监视性能等。为了方便查询获取参数这里提供一个简单的查询工具供大家查询使用下载后打开其默认查询的是Win32_ComputerSystem也就是系统的基本参数信息 如果我们需要获取其他信息比如得到计算机中所安装的所有Windows服务信息可以执行SELECT * FROM Win32_Service语句当然也有许多其他的通用语句可以让我们使用例如如下几种常用的语句。 查询所有安装的软件 SELECT * FROM Win32_Product 查询所有逻辑磁盘的信息 SELECT * FROM Win32_LogicalDisk 查询所有网络适配器的信息 SELECT * FROM Win32_NetworkAdapter 查询操作系统信息 SELECT * FROM Win32_OperatingSystem 查询所有正在运行的进程 SELECT * FROM Win32_Process 查询所有用户账户信息 SELECT * FROM Win32_UserAccount 查询系统启动项 SELECT * FROM Win32_StartupCommand 查询物理内存 SELECT * FROM Win32_PhysicalMemory 如上图所示查询将返回Win32_Service类中所有服务的信息。你可以根据需要编写更复杂的查询以满足特定的管理或监视要求。 为了让读者更加方便的使用查询功能此处我封装了一个SelectQuerySQL查询函数该函数需要传入特定的查询语句特定的查询字段以及返回值缓冲区此时只需要读取缓冲区内的数据即可得到查询结果。 #define _CRT_SECURE_NO_WARNINGS #define _WIN32_DCOM #define _CRT_NONSTDC_NO_DEPRECATE#include comdef.h #include Wbemidl.h #include iostream #include string# pragma comment(lib, wbemuuid.lib)using namespace std;// 去掉字符串中的空格 void Trims(char* data) {int i -1, j 0;int ch ;while (data[i] ! \0){if (data[i] ! ch){data[j] data[i];}}data[j] \0; }// 通用查询方法,每次查询一条 bool SelectQuerySQL(LPCWSTR SQL, LPCWSTR Key, OUT char OutBuf[1024]) {HRESULT hres;CoUninitialize();hres CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hres)){return false;}hres CoInitializeSecurity(0, -1, 0, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0);if (FAILED(hres)){CoUninitialize();return false;}IWbemLocator* pLoc NULL;hres CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)pLoc);if (FAILED(hres)){CoUninitialize();return false;}IWbemServices* pSvc NULL;hres pLoc-ConnectServer(_bstr_t(LROOT\\CIMV2), 0, 0, 0, 0, 0, 0, pSvc);if (FAILED(hres)){pLoc-Release();CoUninitialize();return false;}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)){pSvc-Release();pLoc-Release();CoUninitialize();return false;}IEnumWbemClassObject* pEnumerator NULL;// 执行WSQL语句hres pSvc-ExecQuery(bstr_t(WQL),bstr_t(SQL),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,pEnumerator);if (FAILED(hres)){pSvc-Release();pLoc-Release();CoUninitialize();return false;}IWbemClassObject* pclsObj;ULONG uReturn 0;while (pEnumerator){HRESULT hr pEnumerator-Next(WBEM_INFINITE, 1, pclsObj, uReturn);if (0 uReturn){break;}VARIANT vtProp;// 获取到指定Key字段hr pclsObj-Get(Key, 0, vtProp, 0, 0);// 将获取到的数据返回给OutBufwcstombs(OutBuf, vtProp.bstrVal, 1024);VariantClear(vtProp);pclsObj-Release();}pSvc-Release();pLoc-Release();pEnumerator-Release();CoUninitialize();return true; }有了上述函数的封装那么实现查询就变得很容易了当我们需要查询CPU序列号时可以直接执行SELECT * FROM win32_Processor并取出里面的ProcessorId字段使用函数时可以总结为如下所示的案例 int main(int argc, char *argv[]) {char RefBuffer[1024] { 0 };bool ref false;ref SelectQuerySQL(LSELECT * FROM win32_Processor, LProcessorId, RefBuffer);std::cout 获取CPU序列号: RefBuffer std::endl;Trims(RefBuffer);system(pause);return 0; }输出效果如下所示 根据这个查询方法我们就可以得到系统的各类固件序列号这对于软件认证尤为重要 int main(int argc, char *argv[]) {char RefBuffer[1024] { 0 };bool ref false;ref SelectQuerySQL(LSELECT * FROM win32_Processor, LProcessorId, RefBuffer);std::cout 获取CPU序列号: RefBuffer std::endl;Trims(RefBuffer);ref SelectQuerySQL(LSELECT * FROM Win32_BaseBoard, LSerialNumber, RefBuffer);std::cout 获取主板ID号: RefBuffer std::endl;Trims(RefBuffer);ref SelectQuerySQL(LSELECT * FROM Win32_BIOS, LSerialNumber, RefBuffer);std::cout 获取BIOS序列号: RefBuffer std::endl;Trims(RefBuffer);ref SelectQuerySQL(LSELECT * FROM Win32_PhysicalMemory, LSerialNumber, RefBuffer);std::cout 获取内存序列号: RefBuffer std::endl;Trims(RefBuffer);ref SelectQuerySQL(LSELECT * FROM Win32_DiskDrive WHERE Index 0, LSerialNumber, RefBuffer);Trims(RefBuffer);std::cout 获取硬盘序列号: RefBuffer std::endl;system(pause);return 0; }输出效果如下所示 当然有时我们也需要一次性输出多个参数某些数据存在多条记录在输出时也需要增加一些代码我们以Win32_LogicalDisk为例代码需要进行一定的改进在循环时分别取出不同的字段此时的查询函数需要相应的做一些改进如下是查询函数需要变化的位置。 while (pEnumerator) {HRESULT hr pEnumerator-Next(WBEM_INFINITE, 1, pclsObj, uReturn);if (0 uReturn){break;}// 输出盘符字段VARIANT vtProp_DeviceID;VARIANT vtProp_FreeSpace;VARIANT vtProp_Size;// 获取到指定Key字段hr pclsObj-Get(LDeviceID, 0, vtProp_DeviceID, 0, 0);hr pclsObj-Get(LFreeSpace, 0, vtProp_FreeSpace, 0, 0);hr pclsObj-Get(LSize, 0, vtProp_Size, 0, 0);// 转换数据为字符串char x[32], y[32], z[32];wcstombs(x, vtProp_DeviceID.bstrVal, 32);wcstombs(y, vtProp_FreeSpace.bstrVal, 32);wcstombs(z, vtProp_Size.bstrVal, 32);std::cout 分区: x std::endl;std::cout 剩余: y std::endl;std::cout 容量: z std::endl;// 清理VariantClear(vtProp_DeviceID);VariantClear(vtProp_FreeSpace);VariantClear(vtProp_Size);pclsObj-Release(); }此外在查询参数上也应该修改为对应的SELECT * FROM Win32_LogicalDisk查询磁盘 int main(int argc, char *argv[]) {char RefBuffer[1024] { 0 };bool ref false;ref SelectQuerySQL(LSELECT * FROM Win32_LogicalDisk, LProcessorId, RefBuffer);Trims(RefBuffer);system(pause);return 0; }此时当再一次运行这段代码就可以查询到当前系统中所有的磁盘信息如下图所示
http://www.pierceye.com/news/954817/

相关文章:

  • 投资网站排行军事最新新闻播报
  • 梅州建设网站丰台网页设计公司
  • 短期网站建设培训学校网页建站价格
  • 偏门网站建设做的网站被挂马
  • 三五互联网站自己做一个网站需要什么
  • wordpress博客网站深圳建工集团
  • 罗永浩做的网站房产网站设计方案
  • 创建个人网站多少钱模板速成网站
  • 晋江做网站的公司哪家好企业网站报价
  • 百度权重查询网站旅游公司的网站怎么做
  • 品牌网站建设小蝌蚪2a西安中交建设集团网站
  • 潍坊网页网站制作优畅 wordpress
  • 搜狗收录网站网站制作费用预算表
  • dede网站安全长沙营销型
  • 那些做电影视频网站的赚钱吗邯郸网站建设方案
  • 在线做app的网站wordpress 产品分类
  • seo网站建设规划网站模板视频教程
  • 沈阳网站制作策划wordpress 文章页调用
  • 网站开发和网络工程师方法网站目录
  • 用dw做网站的好处网页美工培训中心
  • 中文域名注册 .网站网站英文地图怎么做
  • 汽车行业网站建设维护服务wordpress改投票系统
  • 网站快照长期不更新wordpress 顶部高度
  • 雨颜色网站建设电器类网站设计
  • 网站建设模块化实现企业网站建设范文
  • 网站培训班有哪些课程中国工程建设标准化协会官方网站
  • 医院网站建设 费用做商业网站
  • 网站设计考虑因素wordpress录入表单写数据库
  • 个人博客网站设计网站优化方式有哪些
  • 网站建设文化教程网站开发建设成本