| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2995 人关注过本帖
标题:c# winfrom 如何获取远程计算机的内存使用率和可用内存
只看楼主 加入收藏
someday
Rank: 3Rank: 3
来 自:保定
等 级:论坛游侠
帖 子:83
专家分:116
注 册:2010-10-8
结帖率:70.59%
收藏
已结贴  问题点数:20 回复次数:4 
c# winfrom 如何获取远程计算机的内存使用率和可用内存
请教大侠们 c# winfrom 如何获取远程计算机的内存使用率和可用内存?如果还能获取远程计算机的CPU温度就更好了。
搜索更多相关主题的帖子: 如何 计算机 内存 
2012-12-19 15:05
mmxo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:189
专家分:1090
注 册:2012-11-7
收藏
得分:20 
如下,计算机列表使用DirectoryServices获取,点击子节点后使用WMI获取相应远程计算机物理内存信息,具体的使用率请自行计算,CPU温度请使用Win32_TemperatureProbe类来获取:
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Management;
using System.Windows.Forms;

namespace RemoteCpuAndMore
{
    public partial class FormMain : Form
    {
        #region 构造函数
        
        public FormMain()
        {
            InitializeComponent();
            Init();
        }

        #endregion

        #region 控件事件

        void TvComputers_AfterSelect(object sender, TreeViewEventArgs e)
        {
            
            if (e.Node.Level == 0) return;
            try
            {
                var ms = new ManagementScope(string.Concat("\\\\", e.Node.Text, "\\root\\cimv2"),
                                             new ConnectionOptions
                                                 {
                                                     Username = "Administrator",
                                                     Password = "DoNotRememberThisPassword",
                                                     Authority = "ntlmdomain:DOMAIN"
                                                 });
                ms.Connect();
                var moc = (new ManagementObjectSearcher(ms, new ObjectQuery("select * from Win32_OperatingSystem"))).Get(); 
                foreach ( ManagementObject mo in moc )
                {
                    
                    var enumerator = mo.Properties.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        Lv.Items.Add(
                            new ListViewItem(new[]
                                                 {
                                                     enumerator.Current.Name,
                                                     enumerator.Current.Value == null
                                                         ? "null"
                                                         : enumerator.Current.Value.ToString()
                                                 }));
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion

        #region 私有方法

        private static IEnumerable<DirectoryEntry> GetComputers(string domainName)
        {
            var result = new List<DirectoryEntry>();
            var domain = new DirectoryEntry(string.Concat("WinNT://", domainName));
            foreach (DirectoryEntry child in domain.Children)
            {
                if (child.SchemaClassName != "Computer") continue;
                result.Add(child);
            }
            return result;
        }

        private static IEnumerable<DirectoryEntry> GetDomainDEs()
        {
            var result = new List<DirectoryEntry>();
            var nt = new DirectoryEntry("WinNT:");
            foreach (DirectoryEntry child in nt.Children)
            {
                if (child.SchemaClassName != "Domain") continue;
                result.Add(child);
            }
            return result;
        }

        private void Init()
        {
            TvComputers.AfterSelect += TvComputers_AfterSelect;

            var domainDEs = GetDomainDEs();
            foreach (var domainDE in domainDEs)
            {
                var domainNode = TvComputers.Nodes.Add(domainDE.Name);
                var computers = GetComputers(domainDE.Name);
                foreach (var computer in computers)
                    domainNode.Nodes.Add(computer.Name);
            }
        }

        #endregion
    }
}

为提高中华编程水平而奋斗
2012-12-19 22:42
someday
Rank: 3Rank: 3
来 自:保定
等 级:论坛游侠
帖 子:83
专家分:116
注 册:2010-10-8
收藏
得分:0 
回复 2楼 mmxo
非常感谢版主给的思路,给了我很多帮助,但是使用wmi 的Win32_TemperatureProbe  类获取温度,但是得到的 ManagementObjectCollection对象个数为0,从一个人的博客上看到 说是大部分主板不直接支持wmi 的Win32_TemperatureProbe,可能就是这个原因吧,
2012-12-20 10:21
mmxo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:189
专家分:1090
注 册:2012-11-7
收藏
得分:0 
嗯,实验中我也取不到,但理论上就是用Win32_TemperatureProbe的。哪位大哥知道有什么样的办法能确实取到温度值的还望赐教!

为提高中华编程水平而奋斗
2012-12-20 15:09
yu52590
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-5-13
收藏
得分:0 
回复 楼主 someday
太棒哦
2016-05-13 11:11
快速回复:c# winfrom 如何获取远程计算机的内存使用率和可用内存
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026322 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved