C#程序設計獲取系統信息的Windows窗體淺析
C#程序設計獲取系統信息的Windows窗體的背景許多軟件都有自動關機功能,特別是在長時間下載的時候,這個功能可是使你不用以守候在計算機前面,而電腦卻能按照您事先的設定自動關閉。現在我們用visual C#來編寫一個多功能的關機程序。C#程序設計獲取系統信息的Windows窗體是該程序的一部分,現在讓我們來看看具體的過程。
C#程序設計獲取系統信息的Windows窗體實現的步驟:
C#程序設計獲取系統信息的Windows窗體實現1. 界面的設計
向工程中增加一個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窗體實現的基本情況就向你介紹到這里,希望對你了解和學習C#程序設計獲取系統信息的Windows窗體實現有所幫助。
【編輯推薦】