#define _UNICODE /*主要对C标准库函数,将宏替换为宽字节形式*/
#define UNICODE /*主要对Windows API标准函数,将函数宏替换为宽字节形式*/
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include <pdh.h>
#include <pdhmsg.h> /*存放PDH函数返回的错误代码*/
#include <tchar.h> ///
#pragma comment(lib, "pdh.lib")
void getObjects(BOOL bCounter,BOOL bInstance);
void getObjcetItem(LPTSTR ptsObject,BOOL bCounter,BOOL bInstance);
void main(void) {
getObjects(TRUE,FALSE);
getObjects(FALSE,TRUE);
}
void getObjects(BOOL bCounter,BOOL bInstance) {
PDH_STATUS status = ERROR_SUCCESS;
LPTSTR ptsObjectsListBuffer = NULL;
DWORD dwObjectsListSize = 0;
LPTSTR pTemp = NULL;
/*第一次调用,将返回实际的字符数*/
status = PdhEnumObjects(
NULL, // real-time source
NULL, // local machine
ptsObjectsListBuffer, // LPTSTR mszObjectList
&dwObjectsListSize, //LPDWORD pcchBufferLength,
PERF_DETAIL_EXPERT, //DWORD dwDetailLevel
FALSE //BOOL bRefresh
);
/*读取性能对象列表*/
if (status == PDH_MORE_DATA) {
// Allocate the buffers and try the call again.
ptsObjectsListBuffer = (LPTSTR) malloc(dwObjectsListSize * sizeof(TCHAR));
if (NULL != ptsObjectsListBuffer) {
status = PdhEnumObjects(
NULL, // real-time source
NULL, // local machine
ptsObjectsListBuffer, // LPTSTR mszObjectList
&dwObjectsListSize, //LPDWORD pcchBufferLength,
PERF_DETAIL_EXPERT, //DWORD dwDetailLevel
FALSE //BOOL bRefresh
);
if (status == ERROR_SUCCESS) {
for (pTemp = ptsObjectsListBuffer; *pTemp != 0;pTemp += _tcslen(pTemp) + 1)
/*从字符数组中读取字符串的方法*/
{
_tprintf(_T("%s\n"), pTemp);
getObjcetItem(pTemp,bCounter,bInstance);
//wprintf(L"%s\n", pTemp);
}
} else {
_tprintf(_T("Second PdhEnumObjects failed with %0x%x.\n"),
status);
}
} else {
_tprintf(_T("Unable to allocate buffers.\n"));
status = ERROR_OUTOFMEMORY;
}
} else {
_tprintf(_T("\nPdhEnumObjects failed with 0x%x.\n"), status);
}
if (ptsObjectsListBuffer != NULL)
free(ptsObjectsListBuffer);
}
void getObjcetItem(LPTSTR ptsObject,BOOL bCounter,BOOL bInstance) {
PCTSTR strObject =ptsObject;
PDH_STATUS status = ERROR_SUCCESS;
LPTSTR ptsCounterListBuffer = NULL; //类的属性列表
DWORD dwCounterListSize = 0;
LPTSTR ptsInstanceListBuffer = NULL; //实例列表
DWORD dwInstanceListSize = 0;
LPTSTR pTemp = NULL;
// Determine the required buffer size for the data.
status = PdhEnumObjectItems(
NULL, // real-time source
NULL, // local machine
strObject, // object to enumerate
ptsCounterListBuffer, &dwCounterListSize,//如果Buffer为NULL,Size为0
ptsInstanceListBuffer, &dwInstanceListSize,
PERF_DETAIL_WIZARD, // counter detail level
0);
if (status == PDH_MORE_DATA) {
// Allocate the buffers and try the call again.
ptsCounterListBuffer = (LPTSTR) malloc(dwCounterListSize * sizeof(TCHAR));
ptsInstanceListBuffer = (LPTSTR) malloc(dwInstanceListSize * sizeof(TCHAR));
if (NULL != ptsCounterListBuffer && NULL != ptsInstanceListBuffer) {
status = PdhEnumObjectItems(
NULL, // real-time source
NULL, // local machine
strObject, // object to enumerate
ptsCounterListBuffer, &dwCounterListSize,
ptsInstanceListBuffer, &dwInstanceListSize,
PERF_DETAIL_WIZARD, // counter detail level
0);
if (status == ERROR_SUCCESS) {
_tprintf(_T("_____________________\n"));
_tprintf(_T("Counters ConTain:\n\n"));
//wprintf(L"Counters that the Process objects defines:\n\n");
// Walk the counters list. The list can contain one
// or more null-terminated strings. The list is terminated
// using two null-terminator characters.
if(bCounter){
for (pTemp = ptsCounterListBuffer; *pTemp != 0;pTemp += _tcslen(pTemp) + 1) {
_tprintf(_T("\t"));
_tprintf(_T("%s\n"), pTemp);
//wprintf(L"%s\n", pTemp);
}
}
if(bInstance){
_tprintf(_T("_____________________\n"));
_tprintf(_T("\nInstances Contain:\n\n"));
//wprintf(L"\nInstances of the Process object:\n\n");
// Walk the instance list. The list can contain one
// or more null-terminated strings. The list is terminated
// using two null-terminator characters.
for (pTemp = ptsInstanceListBuffer; *pTemp != 0;pTemp +=_tcslen(pTemp) + 1) {
_tprintf(_T("\t"));
_tprintf(_T("%s\n"), pTemp);
//wprintf(L"%s\n", pTemp);
}
}
} else {
_tprintf(_T("Second PdhEnumObjectItems failed with %0x%x.\n"),
status);
//wprintf(L"Second PdhEnumObjectItems failed with %0x%x.\n",status);
}
} else {
_tprintf(_T("Unable to allocate buffers.\n"));
//wprintf(L"Unable to allocate buffers.\n");
status = ERROR_OUTOFMEMORY;
}
} else {
_tprintf(_T("\nPdhEnumObjectItems failed with 0x%x.\n"), status);
//wprintf(L"\nPdhEnumObjectItems failed with 0x%x.\n", status);
}
if (ptsCounterListBuffer != NULL)
free(ptsCounterListBuffer);
if (ptsInstanceListBuffer != NULL)
free(ptsInstanceListBuffer);
}
相关推荐
Delphi网络编程参考实例集.rar
Delphi网络编程参考实例集,可以显示网络计数信息: { 列举机器( machines)、对象(objects),计数( counters)和实例(instances). 获取缺省对象和缺省计数 利用以下函数: PdhEnumMachines 列举机器 PdhConnectMachine 连接机器 PdhEnumObjects 列举对象 PdhEnumObjectItems 对象列表对象 pdhGetDefaultPerfObject 缺省计数对象 PdhGetDefaultPerfCounter 缺省计数
系统性能计数器
* 系统性能计数器quoted by wanfustudio from csdn: http://blog.youkuaiyun.com/wanfustudiotrackback:http://hi.baidu.com/wlzqi一.性能计数器简介:系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计 Windows 系统各项性能指标的东西。在 Windows
Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++
部分参考:https://mp.weixin.qq.com/s/2GZAJAUPHTXFOKDRv-D21Q 一、下载源码 https://github.com/opencv 二、源码编译 ① 在cmake中添加源码编译路径和生成路径,第一次点击configure。 ② 添加contrib路径 第一次configure后,找到OPENCV_EXTRA_MODULES_PATH,将contrib路径添加进来,注意要具体到modules/,继续configure。 ..
windows系统性能计数器函数
系统性能计数器[Z] FROM:http://hi.baidu.com/wlzqi/blog/item/d9782e73f4b4ba1c8701b092.html 上面的地址是专家的地址,有什么问题请那边看 一.性能计数器简介: 系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计 Windows 系统各项性能指标的东西。在 Windows 2000
S32K3基于EB配置GPT触发WDG的实战解析
本文详细解析了S32K3 MCU基于EB tresos工具配置GPT定时器触发看门狗(WDG)的实战方法。通过分析协同工作机制、MCAL配置步骤及代码实现,帮助开发者构建可靠的硬件监控系统,提升汽车电子系统的安全性与实时性。
告别‘打架’的检测头:手把手教你用PyTorch实现YOLOv11解耦头(附完整代码)
本文详细解析了YOLOv11解耦检测头的创新设计与PyTorch实现,通过解耦分类和回归任务,显著提升目标检测性能。文章包含完整的代码实现、架构设计解析及工程调优技巧,帮助开发者深入理解并应用这一先进技术。
纵谈进程枚举
转自:http://www.blog.edu.cn/user2/33587/archives/2005/254906.shtml代码下载:说明 ProcessSpy.zip当程序出现异常而失去响应,我们通常的做法是打开Windows任务管理器强行将其“杀死”。Windows任务管理器是个好东西,它能显示当前系统中运行的所有进程,以及它们的实时性能参数。但是作为程序员,你知道这些功能是怎么
电力远动入门:手把手解析IEC 60870-5-101规约的帧结构与报文交互(基于DL/T634.5101-2002)
本文深入解析IEC 60870-5-101规约的帧结构与报文交互,适用于电力远动通信系统。通过详细讲解规约的基础架构、控制域位定义及典型报文交互流程,帮助工程师快速掌握101规约的核心技术,提升电力自动化系统的调试与维护能力。
获取PDH性能对象列表之三-------------获取性能对象的属性列表以及实例列表
#define _UNICODE /*主要对C标准库函数,将宏替换为宽字节形式*/ #define UNICODE /*主要对Windows API标准函数,将函数宏替换为宽字节形式*/ #define WIN32_LEAN_AND_MEAN 1 #include #include #include #include #include /*存放PDH函数返回的错误代码*/ #includ
从接线到组态:手把手教你搞定PROFIBUS-DP与PA的混合网络搭建(基于西门子TIA Portal)
本文详细介绍了PROFIBUS-DP与PA混合网络的搭建方法,基于西门子TIA Portal平台,从硬件选型、网络架构设计到组态配置和现场调试,提供了一套完整的实战指南。重点解析了DP/PA耦合器的使用、地址映射策略及网络诊断技巧,帮助工程师高效构建高可靠性的工业自动化网络。
化工设计软件:PDMS二次开发_(7).数据导入与导出技术
在某些复杂场景下,PDMS提供的标准API接口可能无法满足需求。此时,可以通过自定义API接口来实现特定的数据导入与导出功能。自定义设备导入API接口可以处理更复杂的设备数据格式。# 导入必要的库import pdms_api # 假设有一个PDMS API库# 定义自定义设备数据# 自定义设备导入API接口# 调用自定义设备导入API接口# 输出导入成功的消息print("自定义设备数据导入成功")在PDMS二次开发中,数据的导入与导出是关键的技术环节。
使用PDH获取windows状态
PDH使用
一张图讲透银行个人外汇业务逻辑和实操
个人外汇业务主要分为结售汇和外币兑换两类,前者满足日常跨境需求,后者因投机属性多数银行已暂停。业务核心是利用汇率波动实现货币兑换,满足支付或投资需求。交易涉及客户分类、主流币种、多种渠道和汇率计算规则,需区分直接/间接标价法判断汇率走势。银行通过"货币兑换"科目核算损益,采用期末折算确认盈亏。监管要求包括5万美元年度额度、合法渠道、真实性原则及大额申报等。随着跨境金融数字化发展,掌握基础逻辑和合规要求是安全参与外汇业务的关键。
用Pdh库获得CPU利用率
花了三天时间搞清楚了Pdh库中几个函数的具体用法,MSDN上只有解释,没有示例;网上查资料,也没能帮我解决问题,可能由于硬件和操作系统不同,网上提供的代码在我机器上不能运行,具体是哪的错误网上没有查到相关资料。无计可施的时候,一次无聊的尝试,成功了,然后顿悟。现整理如下: 可以用Pdh(performance data helper)库提供的一些函数来获取系统当前的一些性能数据(也可以读取日
SI案例分享--FPC(柔性电路板)信号仿真
设计高性能的柔性PCB时,由于采用了网格地的参考面构造,因此,需要按照特定的结构进行布局,才可以保证所需目标阻抗的稳定性,该结构的配置过程称为“Hatch Configuration”,合理的参数配置将有助于得到满意的设计效果。
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
Windows Performance Info
下面介绍如何远程取得 Windows Performance Info一.性能计数器简介:系统性能计数器?也许好多朋友没有用过吧!(献丑了)此物可谓功能强大,顾名思义就是可以统计 Windows 系统各项性能指标的东西。在 Windows 2000 及以上系统中,如果是默认安装就会自带性能计数器程序,大家可以在 “控制面板 -〉管理 -〉性能”中看到该程序。Windows 系统性能计
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
windows下使用性能计数器遇到的坑
性能计数器简介 Microsoft Windwos NT/2000 提供了一个强大的API集来访问系统事件和性能数据的众多计数器。我们既可以实时地得到计数器的值,也可以从一个日志文件中读取计数器数据。功能可为强大,而且使用简单。 可以用来做什么 可以用来监控记录当前 CPU 的使用率、memory 使用率、CPU 占有率 、memory 占有率,获取系统和进程的物理内存,虚拟内存,线程数,句柄数,CPU,网络利用率,磁盘读写速率等。总之,很强大。windows下可以通过perfmon.msc调起系统的
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
c语言跨文件调用变量PDHH,枚举本地-远程NT系统进程
Windows2000中有个工具taskmgr.exe就可以比较详细的查看当前系统进程信息,但是那是Windows GUI程序,有时候是不是觉得命令行下的东西更方便呢?其实已经有不少命令行下的枚举系统进程的工具了,M$的Resource Kit中好象也有,但去了解他们是怎么实现的,自己动手做出来,是不是更有意思呢:)进程通常被定义为一个正在运行的程序的实例,它由两部分组成:<1>操作系...
windows性能监视器 PDH的使用
一、概述 使用pdh,获取windows下CPU占用率、网络占用率、内存占用率、网络上下行速度等 二、所需头文件及库 包含可能所需的pdh相关头文件,windows下操作字符串所需头文件等 #include <Pdh.h> #include <PdhMsg.h> #include <IPHlpApi.h> #include <comutil.h> #include <tchar.h> #pragma comment(lib,"pd
PdhCollectQueryData和获取系统信息
[code=C/C++]/************************************************************************************** * Source: cpucpu.c/cpp * Description: * This program can used to get the percen
Java小白学习之路(Java基础)Day07
Day07 面向对象 何谓面向对象? >面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 >面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。 面向对象的三大特征: >封装:封装就是把对象的属性(状态)和方法(行为)结合在一起,并尽可能隐蔽对象的内部细节,成为一个不可分割的独立单位(即对象),对外形成一个边界,只保留有限的对外接口使之与外部发生联系。 >继承:继承是软件重用的一种形式,它通过重用现有类
4381



被折叠的 条评论
为什么被折叠?



