社区
Windows Server
帖子详情
请问如何获取这些系统信息?
hiei1125
2007-12-06 11:52:28
想获取以下参数:
处理器\处理器队列长度
磁盘(逻辑磁盘或物理磁盘)\% 磁盘时间
磁盘(逻辑磁盘或物理磁盘)\队列长度
磁盘(逻辑磁盘或物理磁盘)\平均磁盘字节/传输
请问是否有API可供直接调用?
谢谢了
...全文
180
8
打赏
收藏
请问如何获取这些系统信息?
想获取以下参数: 处理器\处理器队列长度 磁盘(逻辑磁盘或物理磁盘)\% 磁盘时间 磁盘(逻辑磁盘或物理磁盘)\队列长度 磁盘(逻辑磁盘或物理磁盘)\平均磁盘字节/传输 请问是否有API可供直接调用? 谢谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hiei1125
2007-12-10
打赏
举报
回复
刚刚查了一下2楼说的WMI,按说能取到系统中所有的资源信息,现在程序已经调通,等下午测试一下是否能获取到相应信息。
谢谢2楼了!
ydlchina
2007-12-10
打赏
举报
回复
up
hiei1125
2007-12-10
打赏
举报
回复
谢谢三楼,这些操作方法我也知道,但是现在想在程序中实现定期获取这些参数的功能。
如果有现成的API就好了。先谢谢你了,结贴的时候一起算分!
继续等待高手解答!
lixin1019
2007-12-10
打赏
举报
回复
这个貌似可以用管理工具--性能 里面可以查看的 不过这个方法是通过日志来查看的 不是即时信息
要做几个设置如下
1.在系统监视器中展开 系统日志和警报 节点,右击 计数器日志 ,选择 新建日志设置 。
2.在 新建日志设置 对话框中输入新日志名称,单击 确定。
3.如右图所示在新日志属性对话框的 常规 选项卡中单击 添加 打开计数器对话框,指定该日志文件记录的计数器,单击 确定 返回。
4.在 数据采样间隔 栏中指定计数器数据多久被采集一次,注意,过密的采集间隔会影响系统的正常工作并造成巨大的日志文件。
5.在 计划 选项卡中指定日志起止时间,可选的方式有:手动、指定起止时间或者指定记录时间。单击 确定 。
6.如果选择手动起止日志,则在日志列表中右击日志,选择 开始 ,日志图标变为绿色。
系统监视器将计数器数据以blg文件的形式保存起来(缺省位置是系统分区的\PerfLogs目录下)。一旦开始记录,计数器数据被定期(按照采样间隔时间)加入日志文件,直到到达计划的日志结束时间或者手工停止日志记录。
SERVER版系统应该有你想要的那几个参数 2000 2003 server应该都有 XP就不知道了~~~呵呵~
hiei1125
2007-12-10
打赏
举报
回复
问题已解决,贴出代码:
LRESULT _getWmiInfo(IWbemClassObject *pClassObject)
{
SAFEARRAY *pvNames = NULL;
if( pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS |
WBEM_MASK_CONDITION_ORIGIN, NULL, &pvNames) == S_OK )
{
long vbl, vbu;
SafeArrayGetLBound(pvNames, 1, &vbl);
SafeArrayGetUBound(pvNames, 1, &vbu);
for(long i = vbl ; i<= vbu; i++ )
{
long index = i ;
WCHAR *wsName = NULL ;
CComVariant varValue ;
SafeArrayGetElement( pvNames, &index , &wsName ) ;
CComBSTR bstrName ( wsName ) ;
if( pClassObject->Get( bstrName , 0 , &varValue , NULL , 0 ) == S_OK )
{
CString str ;
if( varValue.vt & VT_BSTR )
{
str = varValue.bstrVal ;
}
else if( varValue.vt & VT_ARRAY )
{
long iLowBound = 0 , iUpBound = 0 ;
SafeArrayGetLBound( varValue.parray , 1 , &iLowBound ) ;
SafeArrayGetUBound( varValue.parray , 1 , &iUpBound ) ;
for( long j = iLowBound ; j <= iUpBound ; j ++ )
{
VARIANT *pvar = NULL ;
long temp = j ;
if( SafeArrayGetElement( varValue.parray , &temp , pvar ) == S_OK &&
pvar )
{
CComVariant varTemp ;
if( varTemp.ChangeType( VT_BSTR , pvar ) == S_OK )
{
if( !str.IsEmpty() )
str += _T(",");
str += varTemp.bstrVal ;
}
}
}
}
else
{
if( varValue.ChangeType( VT_BSTR ) == S_OK )
str = varValue.bstrVal ;
}
// 打印出硬件信息
printf("%s=%s\n" , CString(bstrName) , str ) ;
}
}
}
if(pvNames)
{
SafeArrayDestroy(pvNames);
return S_OK ;
}
return E_FAIL ;
}
HRESULT GetWmiInfo(LPCTSTR lpszClass)
{
CoInitialize(NULL);
//
// 获取访问 WMI 权限
//
if( CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,NULL, EOAC_NONE, 0 )
== S_OK )
{
//
// 通过 IWbemLocator 和 IWbemServices 这两个 COM 接口访问 WMI, 获取系统信息
//
CComPtr<IWbemLocator> spWbemLocator ;
if( spWbemLocator.CoCreateInstance( CLSID_WbemAdministrativeLocator , 0 ,
CLSCTX_INPROC_SERVER|
CLSCTX_LOCAL_SERVER ) == S_OK )
{
CComPtr<IWbemServices> spWbemServices ;
if( spWbemLocator->ConnectServer( L"root\\cimv2" , NULL, NULL, NULL, 0,
NULL, NULL, &spWbemServices ) == S_OK )
{
//
// 检索指定信息
//
USES_CONVERSION ;
CComPtr<IEnumWbemClassObject> spEnumWbemClassObject ;
CComBSTR bstrQuery ( L"Select * from " ) ;
bstrQuery += T2OLE(lpszClass) ;
if( spWbemServices->ExecQuery( L"WQL" , bstrQuery ,
WBEM_FLAG_RETURN_IMMEDIATELY ,
NULL, &spEnumWbemClassObject ) == S_OK )
{
ULONG uCount = 1, uReturned;
CComPtr<IWbemClassObject> spClassObject ;
if( spEnumWbemClassObject->Reset() == S_OK )
{
int iEnumIdx = 0;
while( spEnumWbemClassObject->Next( WBEM_INFINITE,
uCount, &spClassObject, &uReturned) == S_OK )
{
_getWmiInfo( spClassObject) ;
spClassObject.Release() ;
}
}
}
}
}
}
CoUninitialize();
return 1;
}
使用的就是通过WMI(windows 管理规范)查到的系统资源信息,使用HRESULT GetWmiInfo(LPCTSTR lpszClass)函数,参数为需要查询的性能指标。关于磁盘和cpu的性能指标使用的是Win32_PerfFormattedData_PerfDisk_PhysicalDisk和Win32_Processor。另外PerfFormattedData对应的还有PerfRawData,一个是格式化数据一个是原始数据,我用的是格式化的。
以上程序在Windows XP,Server2003上测试通过,也经过压力测试发现数据有效。现结贴,感谢上面兄弟的支持。
蒋晟
2007-12-10
打赏
举报
回复
WMI?
hiei1125
2007-12-10
打赏
举报
回复
http://www.cnblogs.com/Files/IceSharK/WMI.rar
这个是一个WMI查看器,我现在能获取到上面列出的所有参数,但是不知道哪个才是我想要的。
可能使用WMI并不能达到目的,我再查一下是否还能有别的渠道。
hiei1125
2007-12-06
打赏
举报
回复
再顶一下,请高手指教了!
Android软件开发之
获取
通讯录联系人
信息
雨松MOMO带你做软件 Android软件开发之
获取
通讯录联系人
信息
哇咔咔~~
获得CPU序列号和CPU厂商名
如何获得CPU序列号和CPU厂商名
什么是c语言
系统
调用,什么是
系统
调用?为什么要用
系统
调用?
描述什么是
系统
调用?Linux内核中设置了一组用于实现各种
系统
功能的子程序,称为
系统
调用。用户可以通过
系统
调用命令在自己的应用程序中调用它们。从某种角度来看,
系统
调用和普通的函数调用非常相似。区别仅仅在于,
系统
调用由操作
系统
核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。随Linux核心还提供了一些C语言函数库,这些库对
系统
调用进行了一些包装和扩展,因为这些库函数与系...
Java毕业设计-医疗
信息
管理
系统
????作者主页:疯狂行者???? ????简介:Java领域新星创作者????、【计算机源码之家】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】???? ????文末
获取
源码联系???? 工具下载链接????????????: JDK版本下载 Eclipse下载链接 Mysql下载链接 tomcat下载链接 向日葵远程工具 计算机课程设计|毕业设计之医疗
信息
管理
系统
管理代码-基于SpringBoot医疗
信息
管理
系统
文章目录计算机课程设计|毕业设计之医疗
信息
管理
系统
管理代码-基于Spring
Windows Server
6,872
社区成员
177,935
社区内容
发帖
与我相关
我的任务
Windows Server
Windows 2016/2012/2008/2003/2000/NT
复制链接
扫一扫
分享
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章