社区
Windows Server
帖子详情
请问如何获取这些系统信息?
hiei1125
2007-12-06 11:52:28
想获取以下参数:
处理器\处理器队列长度
磁盘(逻辑磁盘或物理磁盘)\% 磁盘时间
磁盘(逻辑磁盘或物理磁盘)\队列长度
磁盘(逻辑磁盘或物理磁盘)\平均磁盘字节/传输
请问是否有API可供直接调用?
谢谢了
...全文
149
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
打赏
举报
回复
再顶一下,请高手指教了!
获取
系统
信息
-3.3.linux应用编程和网络编程第3部分
本课程主要讲解了一些
获取
linux
系统
信息
的函数,譬如
获取
时间相关的函数群,
获取
伪随机数序列的函数群和proc文件
系统
,目标是让大家学习相应的API和库函数,将来在项目中能够熟练应用之。
什么是
系统
调用?为什么要用
系统
调用?
什么是
系统
调用? Linux内核中设置了一组用于实现各种
系统
功能的子程序,称为
系统
调用。用户可以通过
系统
调用命令在自己的应用程序中调用它们。从某种角度来看,
系统
调用和普通的函数调用非常相似。区别仅仅在于,
系统
调用由操作
系统
核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。 随Linux核心还提供了一些C语言函数库,这些库对
系统
调用进行了一些包装和扩展,因为这些库函数...
实验1.1.2:
获取
主机
系统
信息
方法1:右键点击“此电脑”或“我的电脑”,在菜单栏选择“管理”,在弹出的窗口中选择“设备管理器”,右侧即出现电脑相关硬件,点击对应设备前面的小箭头,即可展开相关设备
信息
。(此方法可以查看硬件
信息
,硬件驱动,查看的设备
信息
较为全面)方法2:右键点击“此电脑”或“我的电脑”,在菜单栏选择“管理”,在弹出的窗口中选择“设备管理器”,右侧即出现电脑相关硬件,点击对应设备前面的小箭头,即可展开相关设备
信息
。(此方法可以查看硬件
信息
,硬件驱动,查看的设备
信息
较为全面)实验名称:实验1.1.2:
获取
主机
系统
信息
。
uniapp微信小程序怎样
获取
宽高?
获取
系统
信息
?微信小程序
获取
用户手机屏幕高度与宽度
信息
等
uniapp微信小程序怎样
获取
宽高?
获取
系统
信息
?微信小程序
获取
用户手机屏幕高度与宽度
信息
等
计算机无法正确抓取硬盘
信息
,
获取
硬盘
信息
失败?2招轻松解决,u盘装
系统
就这么简单!...
原标题:
获取
硬盘
信息
失败?2招轻松解决,u盘装
系统
就这么简单!U盘装
系统
是近来经常听到的一个词汇,现在的人都不再像以前那样事事花钱请人,能自己动手的决不多啰嗦。况且u盘装
系统
确实也不是个技术含量很高的事儿,但有时候也出点意料之外的小状况,就比如
获取
硬盘分区失败,这好像不在计划之内啊。那么今天小编就教教大家遇到
获取
硬盘分区失败该如何操作? 一般出现这种情况,可能的原因有两个,一个是硬盘本身存在故障,...
Windows Server
6,849
社区成员
178,034
社区内容
发帖
与我相关
我的任务
Windows Server
Windows 2016/2012/2008/2003/2000/NT
复制链接
扫一扫
分享
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章