社区
Windows Server
帖子详情
请问如何获取这些系统信息?
hiei1125
2007-12-06 11:52:28
想获取以下参数:
处理器\处理器队列长度
磁盘(逻辑磁盘或物理磁盘)\% 磁盘时间
磁盘(逻辑磁盘或物理磁盘)\队列长度
磁盘(逻辑磁盘或物理磁盘)\平均磁盘字节/传输
请问是否有API可供直接调用?
谢谢了
...全文
183
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
打赏
举报
回复
再顶一下,请高手指教了!
[Kettle]
获取
系统
信息
本文介绍了如何在Kettle
系统
中创建一个转换工程,通过
获取
系统
信息
组件
获取
当月最后一天的时间、计算机名称和IP地址,以满足读取交易数据文件的需求。,
C#
获取
系统
信息
的详细演示程序
本文介绍了使用C#
获取
系统
信息
的演示程序。涵盖
获取
计算机名称、公网IP、端口和网卡
信息
等基础操作,还涉及使用HttpClient访问API、Regex匹配IP地址等高级功能。此外,阐述了如何利用相关类
获取
活跃TCP连接和网络接口
信息
,最后讲解了构建
系统
信息
监控和管理工具的方法。
【收藏】通过 WMI
获取
系统
信息
本文介绍了通过WMI(Windows管理工具)
获取
系统
信息
的方法。WMI可
获取
主板、BIOS、磁盘等几乎所有
系统
信息
,很多网络管理工具基于它开发。文中详细说明了初始化COM接口、
获取
访问权限及通过COM接口访问WMI
获取
信息
的步骤,还列举了可访问的
信息
类型。
java
获取
系统
信息
博客介绍了Java
获取
系统
信息
的方法,包括使用System.getProperties()
获取
系统
信息
、System.getenv()
获取
环境
信息
、调用
系统
命令执行
系统
指令,以及InetAddress.getLocalHost()
获取
本地环境地址等,调用这些方法可
获取
本机IP、环境语言等
信息
。
Android
系统
信息
获取
本文介绍了在Android中如何
获取
系统
信息
,包括主板、boos版本、
系统
定制商等
信息
的
获取
方式,以及如何通过PackageManager和ActivityManager来
获取
应用及运行中的应用
信息
。
Windows Server
6,872
社区成员
177,934
社区内容
发帖
与我相关
我的任务
Windows Server
Windows 2016/2012/2008/2003/2000/NT
复制链接
扫一扫
分享
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章