社区
Windows Server
帖子详情
请问如何获取这些系统信息?
hiei1125
2007-12-06 11:52:28
想获取以下参数:
处理器\处理器队列长度
磁盘(逻辑磁盘或物理磁盘)\% 磁盘时间
磁盘(逻辑磁盘或物理磁盘)\队列长度
磁盘(逻辑磁盘或物理磁盘)\平均磁盘字节/传输
请问是否有API可供直接调用?
谢谢了
...全文
160
8
打赏
收藏
请问如何获取这些系统信息?
想获取以下参数: 处理器\处理器队列长度 磁盘(逻辑磁盘或物理磁盘)\% 磁盘时间 磁盘(逻辑磁盘或物理磁盘)\队列长度 磁盘(逻辑磁盘或物理磁盘)\平均磁盘字节/传输 请问是否有API可供直接调用? 谢谢了
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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软件开发之
获取
通讯录联系人
信息
在Android软件开发中,
获取
通讯录联系人
信息
是一项常见的功能,尤其对于社交或者管理类的应用来说,这是一项必备技能。本文将深入探讨如何在Android平台上实现这一功能。 首先,我们需要了解Android
系统
的权限管理...
Android中
获取
正在运行的应用程序ActivityManager的使用(二)
需要注意的是,这些方法
获取
的
信息
可能会因为
系统
的隐私保护策略而受到限制,尤其是对于第三方应用。 以下是一个简单的示例,展示如何使用`ActivityManager`
获取
正在运行的应用程序: ```java ActivityManager ...
你必须知道的495个C语言问题
给我报了一个晦涩难懂的警告
信息
? 2.7 我遇到这样声明结构的代码:structname{intnamelen;charnamestr[1];};然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素,namelen记录了元素个数。它是怎样工作...
mes
系统
服务器连接失败,mes
系统
如何连接其他
系统
设备?
现在市场上MES
系统
种类比较多,而且生产管理
系统
类型也是比较丰富的,好多企业都使用很多个生产管理
系统
,这时候都需要连接起来,这样就可以更高的提高企业的效率,那么mes
系统
如何连接其他
系统
设备?下面是苏州通商...
iOS之
获取
手机的
系统
信息
iOS的APP应用开发过程中,为了bug跟踪或者
获取
用户反馈,需要自动收集用户设备、
系统
信息
、应用
信息
等。当然这些
信息
是用户的非隐私
信息
,是通过开发api可以
获取
到的。那么通过哪些api可以
获取
这些
信息
呢?iOS的SDK...
Windows Server
6,871
社区成员
177,991
社区内容
发帖
与我相关
我的任务
Windows Server
Windows 2016/2012/2008/2003/2000/NT
复制链接
扫一扫
分享
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章