天道酬勤

博观而约取,厚积而薄发!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#用API来查看系统信息

Posted on 2010-04-29 14:24  Happy Coding  阅读(502)  评论(0编辑  收藏  举报

<HTML>
  <HEAD>
    <title>SystemInfo</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
        <colgroup>
          <col width="50%">
          <col width="50%">
        </colgroup>
        <table width="100%">
          <tr>
            <td bgcolor="#99ccff">Window及系统路径:</td>
            <td bgcolor="#99ccff">系统日期信息:</td>
          </tr>
          <tr>
            <td>
                <asp:Label id="WindowsDirectory" runat="server">WindowsDirectory</asp:Label></td>
            <td>
                <asp:Label id="Date" runat="server">Date</asp:Label></td>
          </tr>
          <tr>
            <td>
                <asp:Label id="SystemDirectory" runat="server">SystemDirectoryLabel</asp:Label></td>
            <td>
                <asp:Label id="Time" runat="server">Time</asp:Label></td>
          </tr>
          <tr>
            <td bgcolor="#99ccff">内存信息:</td>
            <td bgcolor="#99ccff">CUP信息:</td>
          </tr>
          <tr>
            <td>
                <asp:Label id="MemoryLoad" runat="server">MemoryLoad</asp:Label></td>
            <td>
                <asp:Label id="NumberOfProcessors" runat="server">NumberOfProcessorsLabel</asp:Label></td>
          </tr>
          <tr>
            <td>
                <asp:Label id="TotalPhys" runat="server">TotalPhys</asp:Label></td>
            <td>
                <asp:Label id="ProcessorType" runat="server">ProcessorTypeLabel</asp:Label></td>
          </tr>
          <tr>
            <td>
                <asp:Label id="AvailPhys" runat="server">AvailPhys</asp:Label></td>
            <td>
                <asp:Label id="ProcessorLevel" runat="server">ProcessorLevelLabel</asp:Label></td>
          </tr>
          <tr>
            <td>
                <asp:Label id="TotalPageFile" runat="server">TotalPageFile</asp:Label></td>
            <td>
                <asp:Label id="OemId" runat="server">OemIdLabel</asp:Label></td>
          </tr>
          <tr>
            <td>
                <asp:Label id="AvailPageFile" runat="server">AvailPageFile</asp:Label></td>
            <td>
                <asp:Label id="PageSize" runat="server">PageSize</asp:Label></td>
          </tr>
          <tr>
            <td>
                <asp:Label id="TotalVirtual" runat="server">TotalVirtualLabel</asp:Label></td>
            <td></td>
          </tr>
          <tr>
            <td>
                <asp:Label id="AvailVirtual" runat="server">AvailVirtualLabel</asp:Label></td>
            <td></td>
          </tr>
        </table>
        <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 752px; POSITION: absolute; TOP: 304px" runat="server"
          Text="获取"></asp:Button>
    </form>
  </body>
</HTML>

public class SystemInfo : System.Web.UI.Page
  {
    //要添加如下引用
    //using System.Runtime.InteropServices;
    //using System.Text;
    protected System.Web.UI.WebControls.Label WindowsDirectory;
    protected System.Web.UI.WebControls.Label SystemDirectory;
    protected System.Web.UI.WebControls.Label NumberOfProcessors;
    protected System.Web.UI.WebControls.Label ProcessorType;
    protected System.Web.UI.WebControls.Label ProcessorLevel;
    protected System.Web.UI.WebControls.Label OemId;
    protected System.Web.UI.WebControls.Label PageSize;
    protected System.Web.UI.WebControls.Label MemoryLoad;
    protected System.Web.UI.WebControls.Label TotalPhys;
    protected System.Web.UI.WebControls.Label AvailPhys;
    protected System.Web.UI.WebControls.Label TotalPageFile;
    protected System.Web.UI.WebControls.Label AvailPageFile;
    protected System.Web.UI.WebControls.Label TotalVirtual;
    protected System.Web.UI.WebControls.Label AvailVirtual;
    protected System.Web.UI.WebControls.Label Date;
    protected System.Web.UI.WebControls.Label Time;
    protected System.Web.UI.WebControls.Button Button1;

    //在调用API之前,你必须先导入System.Runtime.InteropServices这个名称空间。
    //其中,"DllImport"属性用来从不可控代码中调用一个方法,它指定了DLL的位置,该DLL中包含调用的外部方法;
    //"kernel32"设定了类库名;"public"指明函数的访问类型为公有的;
    //"static"修饰符声明一个静态元素,而该元素属于类型本身而不是指定的对象;
    //"extern"表示该方法将在工程外部执行,同时使用DllImport导入的方法必须使用"extern"修饰符
    [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 Page_Load(object sender, System.EventArgs e)
    {
        // Put user code to initialize the page here
    }

    Web Form Designer generated code

    private void Button1_Click(object sender, System.EventArgs e)
    {
        //调用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();
        //调用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();
        //调用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()+"字节";
        //调用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()+"秒";
    }
  }


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bulbul2006/archive/2007/03/19/1533924.aspx