c#获取系统性能方法与疑问(2)

贰、疑问

c#获取系统性能方法与疑问(1)中的方法是通过读取wmi来获取相关信息的,读取cpu温度发现不准,网上找了很多资料,很多人同样的问题,视乎通过wmi是不可行的,

网络类似问题描述1:
“使用 wmi 获取CPU 温度 后 总是一个静态值, 重启后值可能会改变,但是还是一直保持不变。”

希望高手们提点意见。

wmi方法不成功后,csdn上下了个类似的程序,是通过WinIo来实现的。


问题又出现了
        private void button7_Click(object sender, EventArgs e)
        {
            try
            {
                int temp = 0;
                if (!WinIo.InitializeWinIo())
                {
                    MessageBox.Show("WinIo初始化失败!");
                    return;
                }
                Wait4Set();
                bool tmp = WinIo.SetPortVal(0x6C, 0x80, 1);//将命令写入命令端口0x6C 
                Wait4Set();
                tmp = WinIo.SetPortVal(0x68, 0xE7, 1);//将要访问的寄存器号写入数据端口0x68 
                Wait4Get();
                tmp = WinIo.GetPortVal(0x68, ref temp, 1); ;//将数据从数据端口读出   
                WinIo.ShutdownWinIo();
                textBox1.Text = temp.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private void Wait4Set()
        {
            int tmp = 0;
            WinIo.GetPortVal(0x6c, ref tmp, 1);
            if (tmp != 2 )
                Wait4Set();
        }


        private void Wait4Get()
        {
            int tmp = 0;
            WinIo.GetPortVal(0x6c, ref tmp, 1);
            if (tmp != 1)
                Wait4Set();
       }

会出现死循环,原因在于
Wait4Get()方法里WinIo.GetPortVal(0x6c, ref tmp, 1);返回的tmp永远不等于1.
网络上查了下原因,视乎没有解决方法,好像是c#不能访问底层什么的。
网络回答1:
“你没有实现2个wait的功能,即使实现了wait, 可能还是读不到数据。
因为win32 用户程序,不可能直接读取端口吧! 大部分端口都是被系统保护的。”

为了测试我把Wait4Get去掉
  int temp = 0;
                if (!WinIo.InitializeWinIo())
                {
                    MessageBox.Show("WinIo初始化失败!");
                    return;
                }                
                bool tmp = WinIo.SetPortVal(0x6C, 0x80, 1);//将命令写入命令端口0x6C                 
                tmp = WinIo.SetPortVal(0x68, 0xE7, 1);//将要访问的寄存器号写入数据端口0x68                 
                tmp = WinIo.GetPortVal(0x68, ref temp, 1); //将数据从数据端口读出   
                WinIo.ShutdownWinIo();
                textBox1.Text = temp.ToString();
结果WinIo.GetPortVal(0x68, ref temp, 1); 的返回值都为-1;

根据网络上的意思,c++或delphi通过嵌入汇编可以实现,后下载了个delphi程序,发现确实可以用,但是看不太懂,最麻烦的c#还是不能解决问题。
希望朋友们能提供点意见。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值