社区
Windows Server
帖子详情
请问如何获取这些系统信息?
hiei1125
2007-12-06 11:52:28
想获取以下参数:
处理器\处理器队列长度
磁盘(逻辑磁盘或物理磁盘)\% 磁盘时间
磁盘(逻辑磁盘或物理磁盘)\队列长度
磁盘(逻辑磁盘或物理磁盘)\平均磁盘字节/传输
请问是否有API可供直接调用?
谢谢了
...全文
190
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工具中的"
获取
系统
信息
"组件的相关知识点
【收藏】通过 WMI
获取
系统
信息
通过 WMI
获取
系统
信息
摘要:WMI: Windows Management Instrumentation (Windows 管理工具) 通过 WMI 可以
获取
主板、BIOS、磁盘、显卡、网络等几乎所有的
系统
信息
。 利用这个工具可以管理本地或客户端
系统
中几乎所有的
信息
。很多网络管理工具都是基于WMI开发的。在 Windows NT/2000/XP/2003 都有这个工具,
C#
获取
系统
信息
的详细演示程序
随着
信息
技术的不断进步,开发人员常常需要在编写应用程序时
获取
计算机的各种
信息
。C# 作为一种广泛使用的编程语言,为我们提供了丰富的类库和方法,以满足这些需求。从基本的计算机名称、IP地址,到深入的网络配置、端口状态,甚至是
系统
监控和诊断
信息
,C# 均可提供相应的功能模块以实现
获取
。在本章中,我们将简要介绍C#中
获取
计算机
信息
的相关概念,并概述使用C#进行
信息
获取
的基本工作流程。我们将探讨主要的.NET类库,比如System.Net和等,以及它们在
获取
不同类型
信息
时的应用场景和使用方法。
java
获取
系统
信息
java
获取
系统
信息
的方法 1.System.getProperties(); 使用该方法,可以
获取
到一些
系统
的
信息
Properties properties = System.getProperties(); //
获取
键值 Set<Object> keySet = properties.keySet(); for (Object object : keySet) { ...
Android
系统
信息
获取
1.Android
获取
系统
信息
在android中,我们要
获取
系统
信息
,主要通过两个方面
获取
android.os.Build SystemProperty android.os.Build Build.BOARD (主板) The name of the underlying board, like "goldfish". Build.BOOTLOADER...
Windows Server
6,872
社区成员
177,933
社区内容
发帖
与我相关
我的任务
Windows Server
Windows 2016/2012/2008/2003/2000/NT
复制链接
扫一扫
分享
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章