文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#中如何获取系统信息的Windows窗体

2023-06-17 22:19

关注

这篇文章主要为大家展示了“C#中如何获取系统信息的Windows窗体”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中如何获取系统信息的Windows窗体”这篇文章吧。

C#程序设计获取系统信息的Windows窗体的背景许多软件都有自动关机功能,特别是在长时间下载的时候,这个功能可是使你不用以守候在计算机前面,而电脑却能按照您事先的设定自动关闭。现在我们用visual C#来编写一个多功能的关机程序。C#程序设计获取系统信息的Windows窗体是该程序的一部分,现在让我们来看看具体的过程。

C#程序设计获取系统信息的Windows窗体实现的步骤:

C#程序设计获取系统信息的Windows窗体实现1. 界面的设计

向工程中增加一个Windows窗体并向窗体中添加如下控件:

C#中如何获取系统信息的Windows窗体

C#程序设计获取系统信息的Windows窗体实现2. 在窗体类中引用API函数

using System.Runtime.InteropServices ;   using System.Text ;   [ DllImport("kernel32") ]   public static extern void GetWindowsDirectory(StringBuilder WinDir,int count) ;   [ DllImport("kernel32") ]   public static extern void GetSystemDirectory(StringBuilder SysDir,int count) ;   [ DllImport("kernel32") ]   public static extern void GetSystemInfo(ref CPU_INFO cpuinfo) ;   [ DllImport("kernel32") ]   public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo) ;   [ DllImport("kernel32") ]   public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo) ;

以上几个API的作用分别是获取系统路径,获得CPU相关信息,获得内存的相关信息,获得系统时间等。

C#程序设计获取系统信息的Windows窗体实现3. 定义以下各结构

在声明完所有的API函数后,我们发现后三个函数分别用到了CPU_INFO、MEMORY_INFO、SYSTEMTIME_INFO等结构,这些结构并非是.Net内部的,它们从何而来?其实,我们在用到以上API调用时均需用到以上结构,我们将函数调用获得的信息存放在以上的结构体中,***返回给程序输出。这些结构体比较复杂,但是如果开发者能够熟练运用,那么整个API世界将尽在开发者的掌握之中。以下就是上述结构体的声明:

//定义CPU的信息结构   [StructLayout(LayoutKind.Sequential) ]   public struct CPU_INFO   {   public uint dwOemId ;   public uint dwPageSize ;   public uint lpMinimumApplicationAddress ;   public uint lpMaximumApplicationAddress ;   public uint dwActiveProcessorMask ;   public uint dwNumberOfProcessors ;   public uint dwProcessorType ;   public uint dwAllocationGranularity ;   public uint dwProcessorLevel ;   public uint dwProcessorRevision ;   }    file://定义内存的信息结构   [StructLayout(LayoutKind.Sequential) ]   public struct MEMORY_INFO   {   public uint dwLength ;   public uint dwMemoryLoad ;   public uint dwTotalPhys ;   public uint dwAvailPhys ;   public uint dwTotalPageFile ;   public uint dwAvailPageFile ;   public uint dwTotalVirtual ;   public uint dwAvailVirtual ;   }    file://定义系统时间的信息结构   [StructLayout(LayoutKind.Sequential) ]   public struct SYSTEMTIME_INFO   {   public ushort wYear ;   public ushort wMonth ;   public ushort wDayOfWeek ;   public ushort wDay ;   public ushort wHour ;   public ushort wMinute ;   public ushort wSecond ;   public ushort wMilliseconds ;   }

C#程序设计获取系统信息的Windows窗体实现4. 编写窗体类的方法

private void button1_Click(object sender, System.EventArgs e )   {   file://调用GetWindowsDirectory和GetSystemDirectory函数分别取得Windows路径和系统路径   const int nChars = 128 ;   StringBuilder Buff = new StringBuilder(nChars) ;   GetWindowsDirectory(Buff,nChars) ;   WindowsDirectory.Text = "Windows路径:"+Buff.ToString( ) ;   GetSystemDirectory(Buff,nChars) ;   SystemDirectory.Text = " 系统路径:"+Buff.ToString( ) ;    file://调用GetSystemInfo函数获取CPU的相关信息   CPU_INFO CpuInfo ;   CpuInfo = new CPU_INFO( ) ;   GetSystemInfo(ref CpuInfo) ;   NumberOfProcessors.Text =   "本计算机中有"+CpuInfo.dwNumberOfProcessors.ToString( ) +"个CPU";   ProcessorType.Text = "CPU的类型为"+CpuInfo.dwProcessorType.ToString( ) ;   ProcessorLevel.Text = "CPU等级为"+CpuInfo.dwProcessorLevel.ToString( ) ;   OemId.Text = "CPU的OEM ID为"+CpuInfo.dwOemId.ToString( ) ;   PageSize.Text = "CPU中的页面大小为"+CpuInfo.dwPageSize.ToString( ) ;    file://调用GlobalMemoryStatus函数获取内存的相关信息   MEMORY_INFO MemInfo ;   MemInfo = new MEMORY_INFO( ) ;   GlobalMemoryStatus(ref MemInfo) ;   MemoryLoad.Text =   MemInfo.dwMemoryLoad.ToString( ) +"%的内存正在使用" ;   TotalPhys.Text =   "物理内存共有"+MemInfo.dwTotalPhys.ToString( ) +"字节" ;   AvailPhys.Text =   "可使用的物理内存有"+MemInfo.dwAvailPhys.ToString( ) +"字节" ;   TotalPageFile.Text =   "交换文件总大小为"+MemInfo.dwTotalPageFile.ToString( ) +"字节" ;   AvailPageFile.Text =   "尚可交换文件大小为"+MemInfo.dwAvailPageFile.ToString( ) +"字节" ;   TotalVirtual.Text =   "总虚拟内存有"+MemInfo.dwTotalVirtual.ToString( ) +"字节" ;   AvailVirtual.Text =   "未用虚拟内存有"+MemInfo.dwAvailVirtual.ToString( ) +"字节" ;    file://调用GetSystemTime函数获取系统时间信息   SYSTEMTIME_INFO StInfo ;   StInfo = new SYSTEMTIME_INFO( ) ;   GetSystemTime(ref StInfo) ;   Date.Text = StInfo.wYear.ToString( ) +  "年"+StInfo.wMonth.ToString( ) +"月"+  StInfo.wDay.ToString( ) +"日" ;   Time.Text = (StInfo.wHour+8).ToString( ) +  "点"+StInfo.wMinute.ToString( ) +"分"+  StInfo.wSecond.ToString( ) +"秒" ;   }

以上是“C#中如何获取系统信息的Windows窗体”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯