用Visual C#获取系统信息四法

用Visual C#获取系统信息四法
2007-12-07 13:30
第一种方法:用SystemInformation 类

SystemInformation 提供静态方法和属性,它们可用于获取诸如 Windows 显示元素大小、操作系统设置、网络可用性和系统中所安装硬件的性能等信息,这种方法侧重于操作系统(这里特指Windows)的一些设置和状态

    第二种方法 : 用Environment

通过这种方法可检索的系统信息包括命令行参数、环境变量设置、调用堆栈的内容、上次系统引导以来的时间,以及公共语言运行库的版本等等,测重于使用这个类的应用程序所处的环境和状态,也有比较多的动态信息,比如开机启动后的毫秒数等等。

第三种方法 用RegistryKey

这种方法方法读取的也只能是静态的设置,不过比上面两种方法更加接近操作系统,因为值是直接从注册表中读取出来的,有好处也有不好的地方,好处就是基本上可以获得任何设置。不好的地方是不够便利,毕竟,检索注册表的键值不如直接调用方法来得方便。

第四种方法 用API 函数

这种方法严格说来不是用C#来实现对系统信息的读取,因为它实际调用的是系统API。这种方法有更加有意义的地方,就在其对API功能的调用,因而我们可以做出更多的事情。这种方法也可以在Java中依样画胡芦地用到。

 

下面讲一下程序结构:

//RegistryKey 类所需要的包:

using Microsoft.Win32;
//DllImport方法所需要的包:
using System.Runtime.InteropServices;
//StringBuilder所需要的包:
using System.Text;
//声明API函数
       [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);
       //定义以下各结构
       //定义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;
       }
      //定义内存的信息结构
       [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;
       }
       //定义系统时间的信息结构
       [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;
       }
private void initSysInfoData()
       {
           //获取操作系统设置
           lstSysInfo.Items.Add("计算机名 : " + SystemInformation.ComputerName );
           lstSysInfo.Items.Add("是否已连接网络 : " + SystemInformation.Network );
           lstSysInfo.Items.Add("用户域 : " + SystemInformation.UserDomainName );           
           lstSysInfo.Items.Add("当前线程用户名   : " + SystemInformation.UserName   );       
           lstSysInfo.Items.Add("启动方式 : " + SystemInformation.BootMode );
           lstSysInfo.Items.Add("菜单的字体 : " + SystemInformation.MenuFont );
           lstSysInfo.Items.Add("显示器的数目 : " + SystemInformation.MonitorCount );
           lstSysInfo.Items.Add("鼠标已安装 : " + SystemInformation.MousePresent );
           lstSysInfo.Items.Add("鼠标按钮数    : " + SystemInformation.MouseButtons);   
           lstSysInfo.Items.Add("是否交互模式    : " + SystemInformation.UserInteractive    );
           lstSysInfo.Items.Add("屏幕界限: " + SystemInformation.VirtualScreen );
       }
       public void initEnvData()
       {
      
            //获取程序运行的相关信息.
           lstEnv.Items.Add("命令行:"+ Environment.CommandLine);
            lstEnv.Items.Add("命令行参数:"+ String.Join(", ",Environment.GetCommandLineArgs()));
           lstEnv.Items.Add("当前目录:"+ Environment.CurrentDirectory);
           lstEnv.Items.Add("操作系统版本:"+ Environment.OSVersion);
           lstEnv.Items.Add("系统目录:"+ Environment.SystemDirectory);
            lstEnv.Items.Add("堆栈信息:"+ Environment.StackTrace);
            lstEnv.Items.Add("用户域:"+ Environment.UserDomainName);
           lstEnv.Items.Add("CLR版本:"+ Environment.Version);
           lstEnv.Items.Add("系统启动后经过的毫秒:"+ Environment.TickCount);
            lstEnv.Items.Add("进程上下文的物理内存量:"+ Environment.WorkingSet);   
           String[] drives = Environment.GetLogicalDrives();
           lstEnv.Items.Add("本机磁盘驱动器: "+ String.Join(", ", drives));
   
           // 获取本机所有环境变量
           IDictionary    environmentVariables = Environment.GetEnvironmentVariables();
           foreach (DictionaryEntry de in environmentVariables)
           {
              lstEnv.Items.Add(de.Key+"="+de.Value);
           }
             
        }
       public void initRegKeyData()
        {
           //通过注册表获取信息
           RegistryKey Rkey = Registry.LocalMachine;
           Rkey = Rkey.OpenSubKey("HARDWARE//DESCRIPTION//System//CentralProcessor//0");
           lstRegkey.Items.Add("处理器信息:"+Rkey.GetValue("ProcessorNameString").ToString().Trim());
          
           Rkey=Registry.LocalMachine;
           Rkey = Rkey.OpenSubKey("SOFTWARE//Microsoft//Windows NT//CurrentVersion//NetworkCards//1");
           lstRegkey.Items.Add("网卡信息:"+(String)Rkey.GetValue("Description"));
        }
       public void initAPIData()
       {
          //调用GetWindowsDirectory和GetSystemDirectory函数分别取得Windows路径和系统路径
           const int nChars = 128;
           StringBuilder Buff = new StringBuilder(nChars);
           GetWindowsDirectory(Buff,nChars);
           lstAPI.Items.Add("Windows路径:"+Buff.ToString());
           GetSystemDirectory(Buff,nChars);
           lstAPI.Items.Add("系统路径:"+Buff.ToString());
           //调用GetSystemInfo函数获取CPU的相关信息
           CPU_INFO CpuInfo;
           CpuInfo = new CPU_INFO();
           GetSystemInfo(ref CpuInfo);
           //CPU信息的读取是错误的,我本只有一个CPU,读成了两个
           lstAPI.Items.Add("本计算机中有"+CpuInfo.dwNumberOfProcessors.ToString()+"个CPU");
           lstAPI.Items.Add("CPU的类型为"+CpuInfo.dwProcessorType.ToString());
           lstAPI.Items.Add("CPU等级为"+CpuInfo.dwProcessorLevel.ToString());
           lstAPI.Items.Add("CPU的OEM ID为"+CpuInfo.dwOemId.ToString());
           lstAPI.Items.Add("CPU中的页面大小为"+CpuInfo.dwPageSize.ToString());
           //调用GlobalMemoryStatus函数获取内存的相关信息
           MEMORY_INFO MemInfo;
           MemInfo = new MEMORY_INFO();
           GlobalMemoryStatus(ref MemInfo);
           lstAPI.Items.Add( MemInfo.dwMemoryLoad.ToString()+"%的内存正在使用");
           lstAPI.Items.Add("物理内存共有"+MemInfo.dwTotalPhys.ToString()+"字节");
           lstAPI.Items.Add("可使用的物理内存有"+MemInfo.dwAvailPhys.ToString()+"字节");
           lstAPI.Items.Add( "交换文件总大小为"+MemInfo.dwTotalPageFile.ToString()+"字节");
           lstAPI.Items.Add( "尚可交换文件大小为"+MemInfo.dwAvailPageFile.ToString()+"字节");
           lstAPI.Items.Add( "总虚拟内存有"+MemInfo.dwTotalVirtual.ToString()+"字节");
           lstAPI.Items.Add( "未用虚拟内存有"+MemInfo.dwAvailVirtual.ToString()+"字节");
            //调用GetSystemTime函数获取系统时间信息
           SYSTEMTIME_INFO StInfo;
           StInfo = new SYSTEMTIME_INFO();
           GetSystemTime(ref StInfo);
           lstAPI.Items.Add(StInfo.wYear.ToString()+"年"+StInfo.wMonth.ToString()+"月"+StInfo.wDay.ToString()+"日");
           lstAPI.Items.Add((StInfo.wHour+8).ToString()+"点"+StInfo.wMinute.ToString()+"分"+StInfo.wSecond.ToString()+"秒");

       }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学生宿舍管理系统是一个常见的管理信息系统,它主要用于管理学生宿舍的入住、退宿、维修和安全等方面的事务。下面是一个简单的Visual C#学生宿舍管理系统的实现过程: 1. 创建数据库和数据表 首先,需要创建一个数据库和相关的数据表来存储学生宿舍管理系统的数据。可以使用Microsoft SQL Server等数据库软件来创建和管理数据库。 在数据库中,可以创建以下数据表: - 学生信息表:包括学生姓名、性别、年龄、学号、电话等信息。 - 宿舍信息表:包括宿舍编号、宿舍类型、宿舍容量等信息。 - 入住信息表:包括学生姓名、学号、宿舍编号、入住时间等信息。 - 维修信息表:包括宿舍编号、维修时间、维修原因等信息。 2. 创建Visual C#项目 在Visual Studio中创建一个新项目,选择Windows Form应用程序模板。 3. 设计界面 在Visual Studio的设计器中,可以通过拖拽控件的方式来设计界面。可以根据需要添加按钮、文本框、标签等控件来实现用户交互。 4. 编写代码 在Visual Studio的代码编辑器中,可以编写C#代码来实现学生宿舍管理系统的各种功能。可以使用ADO.NET来连接数据库,使用SQL语句来查询、插入、更新和删除数据。 例如,以下代码实现了查询学生信息的功能: ``` private void btnSearch_Click(object sender, EventArgs e) { // 连接数据库 SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Dormitory;Integrated Security=True"); conn.Open(); // 构造SQL语句 string sql = "SELECT * FROM Student WHERE name='" + txtName.Text + "'"; // 执行查询并将结果显示在列表框中 SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { lstResult.Items.Add(reader["name"] + "\t" + reader["gender"] + "\t" + reader["age"] + "\t" + reader["student_id"] + "\t" + reader["phone"]); } // 关闭数据库连接 reader.Close(); conn.Close(); } ``` 类似地,可以编写代码来实现其他功能,例如添加学生、退宿、维修等。 5. 测试系统 完成编码后,可以进行系统测试。可以输入一些测试数据,例如添加几个学生信息、入住信息等,验证系统的各种功能是否正常。如果出现问题,可以根据错误提示来调试代码。 总之,Visual C#是一个强大的开发工具,可以帮助开发人员快速实现各种应用程序。学生宿舍管理系统是一个比较简单的应用,但也需要考虑到数据安全、用户体验等方面的问题。在实现过程中,需要仔细设计和测试,确保系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值