Visual C#设计多功能关机程序
生活随笔
收集整理的這篇文章主要介紹了
Visual C#设计多功能关机程序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
許多軟件都有自動(dòng)關(guān)機(jī)功能,特別是在長(zhǎng)時(shí)間下載的時(shí)候,這個(gè)功能可是使你不用以守候在計(jì)算機(jī)前面,而電腦卻能按照您事先的設(shè)定自動(dòng)關(guān)閉。現(xiàn)在我們用visual C#來(lái)編寫(xiě)一個(gè)多功能的關(guān)機(jī)程序。該程序具有:定時(shí)關(guān)機(jī)、倒計(jì)時(shí)關(guān)機(jī)、關(guān)機(jī)提醒、系統(tǒng)信息獲取等四項(xiàng)功能, 可設(shè)定關(guān)機(jī)時(shí)間精確到秒。并且讓你很快掌握Visual C#中對(duì)API的操作程序。
一. 設(shè)計(jì)關(guān)閉Windows窗體
1. 界面的設(shè)計(jì)
新建一個(gè)標(biāo)準(zhǔn)工程,向工程中增加一個(gè)Windows窗體并向窗體中添加如下控件,并分別設(shè)置其屬性:
控件名 類(lèi)別 Text??控件名??類(lèi)別??Text
CheckBox1 CheckBox??自動(dòng)關(guān)機(jī)??GroupBox1 GroupBox 當(dāng)前系統(tǒng)時(shí)間
CheckBox1 CheckBox 倒計(jì)時(shí)執(zhí)行操作 GroupBox2 GroupBox??設(shè)定時(shí)間
CheckBox1 CheckBox??定時(shí)報(bào)警 TxtTime??TextBox????
ButCancle??Button 取消 SetupTime DateTimePicker????
ButReOpen Button 重新啟動(dòng) SetupDate??DateTimePicker????
ButClose Button??關(guān)機(jī)??Timer1 Timer 100
ButSysInto Button 系統(tǒng)信息 ButReLogin Button 注消
Windows窗體界面:
將窗體屬性中的caption設(shè)置為"關(guān)閉windows",名稱(chēng)設(shè)置為"frmmain"。
2. 在窗體類(lèi)中引用API函數(shù)
API函數(shù)是構(gòu)筑Windows應(yīng)用程序的基石,是Windows編程的必備利器。每一種Windows應(yīng)用程序開(kāi)發(fā)工具都提供了間接或直接調(diào)用了Windows API函數(shù)的方法,或者是調(diào)用Windows API函數(shù)的接口,也就是說(shuō)具備調(diào)用動(dòng)態(tài)連接庫(kù)的能力。Visual C#和其它開(kāi)發(fā)工具一樣也能夠調(diào)用動(dòng)態(tài)鏈接庫(kù)的API函數(shù)。
在Visual C#中調(diào)用API的基本過(guò)程:
首先,在調(diào)用API之前,你必須先導(dǎo)入System.Runtime.InteropServices這個(gè)名稱(chēng)空間。該名稱(chēng)空間包含了在Visual C#中調(diào)用API的一些必要集合,具體的方法如下:
using System.Runtime.InteropServices ;
using System.Text ;
在導(dǎo)入了名稱(chēng)空間后,我們要聲明在程序中所要用到的API函數(shù)。我們的程序主要是獲取系統(tǒng)的相關(guān)信息,所以用到的API函數(shù)都是返回系統(tǒng)信息的。先給出在Visual C#中聲明API的方法:
[ DllImport("user32") ]
public static extern long SetWindowPos(long hwnd , long hWndInsertAfter, long X , long y , long cx, long cy, long wFlagslong) ;
其中,"DllImport"屬性用來(lái)從不可控代碼中調(diào)用一個(gè)方法,它指定了DLL的位置,該DLL中包含調(diào)用的外部方法;"kernel32"設(shè)定了類(lèi)庫(kù)名;"public"指明函數(shù)的訪問(wèn)類(lèi)型為公有的;"static"修飾符聲明一個(gè)靜態(tài)元素,而該元素屬于類(lèi)型本身而不是指定的對(duì)象;"extern"表示該方法將在工程外部執(zhí)行,同時(shí)使用DllImport導(dǎo)入的方法必須使用"extern"修飾符;最后GetWindowsDirectory函數(shù)包含了兩個(gè)參數(shù),一個(gè)為StringBuilder類(lèi)型的,另一個(gè)為int類(lèi)型的,該方法返回的內(nèi)容存在于StringBuilder類(lèi)型的參數(shù)中。同時(shí),因?yàn)槲覀冊(cè)谶@里使用到了StringBuilder類(lèi),所以在程序的開(kāi)始處,我們還得添加System.Text這個(gè)名稱(chēng)空間,方法同上。
聲明其它的在程序中所要用到的API函數(shù):
[ DllImport("user32") ]
public static extern long ExitWindowsEx(long uFlags, long dwReserved ) ;
[ DllImport("shell32") ]
public static extern long ShellAbout(long uFlags, long dwReserved ) ;??
3. 增加窗體類(lèi)的變量
long dwReserved ;
const int SHUTDOWN = 1 ;
const int REBOOT = 2 ;
const int LOGOFF = 0 ;
long sh ;
int counter , n ;??
4. 編寫(xiě)窗體類(lèi)的方法
在窗體的Load(事件過(guò)程中編寫(xiě)如下代碼:
private void frmmain1_Load(object sender, System.EventArgs e )
{
file://用系統(tǒng)時(shí)間初始化組件
Time.Text = System.DateTime.Today.ToShortDateString( ) + " "+ System.DateTime.Today.ToLongTimeString( ) ;
}
在組件Timer1的OnTimer事件過(guò)程中編寫(xiě)如下代碼:
/ / 在組件Timer1的OnTimer事件過(guò)程中編寫(xiě)如下代碼:
private void Timer1_Timer(object sender, System.EventArgs e )
{
file://接收當(dāng)前日期和時(shí)間,用于即時(shí)顯示
string CurrDate=System.DateTime.Today.ToShortDateString( ) ;
string CurrTime=System.DateTime.Today.ToShortTimeString( ) ;
file://隨時(shí)檢測(cè)設(shè)定的關(guān)機(jī)日期和時(shí)間是否有效
if( this.CheckBox1.Checked == true )
{
if(CurrDate== SetupDate.ToString( ) && CurrTime==SetupTime.ToString( ) )
ColseComputer( ) ;
}
}
private void ColseComputer( )
{ sh = ExitWindowsEx(SHUTDOWN, dwReserved) ; }
private void button1_Click(object sender, System.EventArgs e )
{
Form2 frm=new Form2( ) ;
frm.Show( ) ;
}
private void ButReOpen_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) ; }
private void ButReLogin_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(LOGOFF, dwReserved) ; }
private void ButCancle_Click(object sender, System.EventArgs e )
{ this.Close( ) ; }
private void ButClose_Click_1(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) ; }
二. 設(shè)計(jì)獲取系統(tǒng)信息的Windows窗體
1. 界面的設(shè)計(jì)
向工程中增加一個(gè)Windows窗體并向窗體中添加如下控件:
2. 在窗體類(lèi)中引用API函數(shù)
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) ;??
以上幾個(gè)API的作用分別是獲取系統(tǒng)路徑,獲得CPU相關(guān)信息,獲得內(nèi)存的相關(guān)信息,獲得系統(tǒng)時(shí)間等。
3. 定義以下各結(jié)構(gòu)
在聲明完所有的API函數(shù)后,我們發(fā)現(xiàn)后三個(gè)函數(shù)分別用到了CPU_INFO、MEMORY_INFO、SYSTEMTIME_INFO等結(jié)構(gòu),這些結(jié)構(gòu)并非是.Net內(nèi)部的,它們從何而來(lái)?其實(shí),我們?cè)谟玫揭陨螦PI調(diào)用時(shí)均需用到以上結(jié)構(gòu),我們將函數(shù)調(diào)用獲得的信息存放在以上的結(jié)構(gòu)體中,最后返回給程序輸出。這些結(jié)構(gòu)體比較復(fù)雜,但是如果開(kāi)發(fā)者能夠熟練運(yùn)用,那么整個(gè)API世界將盡在開(kāi)發(fā)者的掌握之中。以下就是上述結(jié)構(gòu)體的聲明:
//定義CPU的信息結(jié)構(gòu)
[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://定義內(nèi)存的信息結(jié)構(gòu)
[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://定義系統(tǒng)時(shí)間的信息結(jié)構(gòu)
[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 ;
}
5. 編寫(xiě)窗體類(lèi)的方法
private void button1_Click(object sender, System.EventArgs e )
{
file://調(diào)用GetWindowsDirectory和GetSystemDirectory函數(shù)分別取得Windows路徑和系統(tǒng)路徑
const int nChars = 128 ;
StringBuilder Buff = new StringBuilder(nChars) ;
GetWindowsDirectory(Buff,nChars) ;
WindowsDirectory.Text = "Windows路徑:"+Buff.ToString( ) ;
GetSystemDirectory(Buff,nChars) ;
SystemDirectory.Text = " 系統(tǒng)路徑:"+Buff.ToString( ) ;
file://調(diào)用GetSystemInfo函數(shù)獲取CPU的相關(guān)信息
CPU_INFO CpuInfo ;
CpuInfo = new CPU_INFO( ) ;
GetSystemInfo(ref CpuInfo) ;
NumberOfProcessors.Text = "本計(jì)算機(jī)中有"+CpuInfo.dwNumberOfProcessors.ToString( ) +"個(gè)CPU";
ProcessorType.Text = "CPU的類(lèi)型為"+CpuInfo.dwProcessorType.ToString( ) ;
ProcessorLevel.Text = "CPU等級(jí)為"+CpuInfo.dwProcessorLevel.ToString( ) ;
OemId.Text = "CPU的OEM ID為"+CpuInfo.dwOemId.ToString( ) ;
PageSize.Text = "CPU中的頁(yè)面大小為"+CpuInfo.dwPageSize.ToString( ) ;
file://調(diào)用GlobalMemoryStatus函數(shù)獲取內(nèi)存的相關(guān)信息
MEMORY_INFO MemInfo ;
MemInfo = new MEMORY_INFO( ) ;
GlobalMemoryStatus(ref MemInfo) ;
MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString( ) +"%的內(nèi)存正在使用" ;
TotalPhys.Text = "物理內(nèi)存共有"+MemInfo.dwTotalPhys.ToString( ) +"字節(jié)" ;
AvailPhys.Text = "可使用的物理內(nèi)存有"+MemInfo.dwAvailPhys.ToString( ) +"字節(jié)" ;
TotalPageFile.Text = "交換文件總大小為"+MemInfo.dwTotalPageFile.ToString( ) +"字節(jié)" ;
AvailPageFile.Text = "尚可交換文件大小為"+MemInfo.dwAvailPageFile.ToString( ) +"字節(jié)" ;
TotalVirtual.Text = "總虛擬內(nèi)存有"+MemInfo.dwTotalVirtual.ToString( ) +"字節(jié)" ;
AvailVirtual.Text = "未用虛擬內(nèi)存有"+MemInfo.dwAvailVirtual.ToString( ) +"字節(jié)" ;
file://調(diào)用GetSystemTime函數(shù)獲取系統(tǒng)時(shí)間信息
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( ) +"點(diǎn)"+StInfo.wMinute.ToString( ) +"分"+StInfo.wSecond.ToString( ) +"秒" ;
}
三. 結(jié)束語(yǔ)。
上面介紹了Visual C#開(kāi)發(fā)多功能關(guān)機(jī)程序的整個(gè)過(guò)程,該程序有一定的實(shí)用價(jià)值。通過(guò)本文的學(xué)習(xí),我相信稍有API使用基礎(chǔ)的開(kāi)發(fā)者可以馬上觸類(lèi)旁通,很快掌握Visual C#中對(duì)API的操作。上面給出的實(shí)例僅僅是一個(gè)簡(jiǎn)單的程序,不過(guò)有興趣的讀者可以進(jìn)一步完善其功能,做出更完美的系統(tǒng)應(yīng)用程序。??
一. 設(shè)計(jì)關(guān)閉Windows窗體
1. 界面的設(shè)計(jì)
新建一個(gè)標(biāo)準(zhǔn)工程,向工程中增加一個(gè)Windows窗體并向窗體中添加如下控件,并分別設(shè)置其屬性:
控件名 類(lèi)別 Text??控件名??類(lèi)別??Text
CheckBox1 CheckBox??自動(dòng)關(guān)機(jī)??GroupBox1 GroupBox 當(dāng)前系統(tǒng)時(shí)間
CheckBox1 CheckBox 倒計(jì)時(shí)執(zhí)行操作 GroupBox2 GroupBox??設(shè)定時(shí)間
CheckBox1 CheckBox??定時(shí)報(bào)警 TxtTime??TextBox????
ButCancle??Button 取消 SetupTime DateTimePicker????
ButReOpen Button 重新啟動(dòng) SetupDate??DateTimePicker????
ButClose Button??關(guān)機(jī)??Timer1 Timer 100
ButSysInto Button 系統(tǒng)信息 ButReLogin Button 注消
Windows窗體界面:
將窗體屬性中的caption設(shè)置為"關(guān)閉windows",名稱(chēng)設(shè)置為"frmmain"。
2. 在窗體類(lèi)中引用API函數(shù)
API函數(shù)是構(gòu)筑Windows應(yīng)用程序的基石,是Windows編程的必備利器。每一種Windows應(yīng)用程序開(kāi)發(fā)工具都提供了間接或直接調(diào)用了Windows API函數(shù)的方法,或者是調(diào)用Windows API函數(shù)的接口,也就是說(shuō)具備調(diào)用動(dòng)態(tài)連接庫(kù)的能力。Visual C#和其它開(kāi)發(fā)工具一樣也能夠調(diào)用動(dòng)態(tài)鏈接庫(kù)的API函數(shù)。
在Visual C#中調(diào)用API的基本過(guò)程:
首先,在調(diào)用API之前,你必須先導(dǎo)入System.Runtime.InteropServices這個(gè)名稱(chēng)空間。該名稱(chēng)空間包含了在Visual C#中調(diào)用API的一些必要集合,具體的方法如下:
using System.Runtime.InteropServices ;
using System.Text ;
在導(dǎo)入了名稱(chēng)空間后,我們要聲明在程序中所要用到的API函數(shù)。我們的程序主要是獲取系統(tǒng)的相關(guān)信息,所以用到的API函數(shù)都是返回系統(tǒng)信息的。先給出在Visual C#中聲明API的方法:
[ DllImport("user32") ]
public static extern long SetWindowPos(long hwnd , long hWndInsertAfter, long X , long y , long cx, long cy, long wFlagslong) ;
其中,"DllImport"屬性用來(lái)從不可控代碼中調(diào)用一個(gè)方法,它指定了DLL的位置,該DLL中包含調(diào)用的外部方法;"kernel32"設(shè)定了類(lèi)庫(kù)名;"public"指明函數(shù)的訪問(wèn)類(lèi)型為公有的;"static"修飾符聲明一個(gè)靜態(tài)元素,而該元素屬于類(lèi)型本身而不是指定的對(duì)象;"extern"表示該方法將在工程外部執(zhí)行,同時(shí)使用DllImport導(dǎo)入的方法必須使用"extern"修飾符;最后GetWindowsDirectory函數(shù)包含了兩個(gè)參數(shù),一個(gè)為StringBuilder類(lèi)型的,另一個(gè)為int類(lèi)型的,該方法返回的內(nèi)容存在于StringBuilder類(lèi)型的參數(shù)中。同時(shí),因?yàn)槲覀冊(cè)谶@里使用到了StringBuilder類(lèi),所以在程序的開(kāi)始處,我們還得添加System.Text這個(gè)名稱(chēng)空間,方法同上。
聲明其它的在程序中所要用到的API函數(shù):
[ DllImport("user32") ]
public static extern long ExitWindowsEx(long uFlags, long dwReserved ) ;
[ DllImport("shell32") ]
public static extern long ShellAbout(long uFlags, long dwReserved ) ;??
3. 增加窗體類(lèi)的變量
long dwReserved ;
const int SHUTDOWN = 1 ;
const int REBOOT = 2 ;
const int LOGOFF = 0 ;
long sh ;
int counter , n ;??
4. 編寫(xiě)窗體類(lèi)的方法
在窗體的Load(事件過(guò)程中編寫(xiě)如下代碼:
private void frmmain1_Load(object sender, System.EventArgs e )
{
file://用系統(tǒng)時(shí)間初始化組件
Time.Text = System.DateTime.Today.ToShortDateString( ) + " "+ System.DateTime.Today.ToLongTimeString( ) ;
}
在組件Timer1的OnTimer事件過(guò)程中編寫(xiě)如下代碼:
/ / 在組件Timer1的OnTimer事件過(guò)程中編寫(xiě)如下代碼:
private void Timer1_Timer(object sender, System.EventArgs e )
{
file://接收當(dāng)前日期和時(shí)間,用于即時(shí)顯示
string CurrDate=System.DateTime.Today.ToShortDateString( ) ;
string CurrTime=System.DateTime.Today.ToShortTimeString( ) ;
file://隨時(shí)檢測(cè)設(shè)定的關(guān)機(jī)日期和時(shí)間是否有效
if( this.CheckBox1.Checked == true )
{
if(CurrDate== SetupDate.ToString( ) && CurrTime==SetupTime.ToString( ) )
ColseComputer( ) ;
}
}
private void ColseComputer( )
{ sh = ExitWindowsEx(SHUTDOWN, dwReserved) ; }
private void button1_Click(object sender, System.EventArgs e )
{
Form2 frm=new Form2( ) ;
frm.Show( ) ;
}
private void ButReOpen_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) ; }
private void ButReLogin_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(LOGOFF, dwReserved) ; }
private void ButCancle_Click(object sender, System.EventArgs e )
{ this.Close( ) ; }
private void ButClose_Click_1(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) ; }
二. 設(shè)計(jì)獲取系統(tǒng)信息的Windows窗體
1. 界面的設(shè)計(jì)
向工程中增加一個(gè)Windows窗體并向窗體中添加如下控件:
2. 在窗體類(lèi)中引用API函數(shù)
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) ;??
以上幾個(gè)API的作用分別是獲取系統(tǒng)路徑,獲得CPU相關(guān)信息,獲得內(nèi)存的相關(guān)信息,獲得系統(tǒng)時(shí)間等。
3. 定義以下各結(jié)構(gòu)
在聲明完所有的API函數(shù)后,我們發(fā)現(xiàn)后三個(gè)函數(shù)分別用到了CPU_INFO、MEMORY_INFO、SYSTEMTIME_INFO等結(jié)構(gòu),這些結(jié)構(gòu)并非是.Net內(nèi)部的,它們從何而來(lái)?其實(shí),我們?cè)谟玫揭陨螦PI調(diào)用時(shí)均需用到以上結(jié)構(gòu),我們將函數(shù)調(diào)用獲得的信息存放在以上的結(jié)構(gòu)體中,最后返回給程序輸出。這些結(jié)構(gòu)體比較復(fù)雜,但是如果開(kāi)發(fā)者能夠熟練運(yùn)用,那么整個(gè)API世界將盡在開(kāi)發(fā)者的掌握之中。以下就是上述結(jié)構(gòu)體的聲明:
//定義CPU的信息結(jié)構(gòu)
[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://定義內(nèi)存的信息結(jié)構(gòu)
[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://定義系統(tǒng)時(shí)間的信息結(jié)構(gòu)
[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 ;
}
5. 編寫(xiě)窗體類(lèi)的方法
private void button1_Click(object sender, System.EventArgs e )
{
file://調(diào)用GetWindowsDirectory和GetSystemDirectory函數(shù)分別取得Windows路徑和系統(tǒng)路徑
const int nChars = 128 ;
StringBuilder Buff = new StringBuilder(nChars) ;
GetWindowsDirectory(Buff,nChars) ;
WindowsDirectory.Text = "Windows路徑:"+Buff.ToString( ) ;
GetSystemDirectory(Buff,nChars) ;
SystemDirectory.Text = " 系統(tǒng)路徑:"+Buff.ToString( ) ;
file://調(diào)用GetSystemInfo函數(shù)獲取CPU的相關(guān)信息
CPU_INFO CpuInfo ;
CpuInfo = new CPU_INFO( ) ;
GetSystemInfo(ref CpuInfo) ;
NumberOfProcessors.Text = "本計(jì)算機(jī)中有"+CpuInfo.dwNumberOfProcessors.ToString( ) +"個(gè)CPU";
ProcessorType.Text = "CPU的類(lèi)型為"+CpuInfo.dwProcessorType.ToString( ) ;
ProcessorLevel.Text = "CPU等級(jí)為"+CpuInfo.dwProcessorLevel.ToString( ) ;
OemId.Text = "CPU的OEM ID為"+CpuInfo.dwOemId.ToString( ) ;
PageSize.Text = "CPU中的頁(yè)面大小為"+CpuInfo.dwPageSize.ToString( ) ;
file://調(diào)用GlobalMemoryStatus函數(shù)獲取內(nèi)存的相關(guān)信息
MEMORY_INFO MemInfo ;
MemInfo = new MEMORY_INFO( ) ;
GlobalMemoryStatus(ref MemInfo) ;
MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString( ) +"%的內(nèi)存正在使用" ;
TotalPhys.Text = "物理內(nèi)存共有"+MemInfo.dwTotalPhys.ToString( ) +"字節(jié)" ;
AvailPhys.Text = "可使用的物理內(nèi)存有"+MemInfo.dwAvailPhys.ToString( ) +"字節(jié)" ;
TotalPageFile.Text = "交換文件總大小為"+MemInfo.dwTotalPageFile.ToString( ) +"字節(jié)" ;
AvailPageFile.Text = "尚可交換文件大小為"+MemInfo.dwAvailPageFile.ToString( ) +"字節(jié)" ;
TotalVirtual.Text = "總虛擬內(nèi)存有"+MemInfo.dwTotalVirtual.ToString( ) +"字節(jié)" ;
AvailVirtual.Text = "未用虛擬內(nèi)存有"+MemInfo.dwAvailVirtual.ToString( ) +"字節(jié)" ;
file://調(diào)用GetSystemTime函數(shù)獲取系統(tǒng)時(shí)間信息
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( ) +"點(diǎn)"+StInfo.wMinute.ToString( ) +"分"+StInfo.wSecond.ToString( ) +"秒" ;
}
三. 結(jié)束語(yǔ)。
上面介紹了Visual C#開(kāi)發(fā)多功能關(guān)機(jī)程序的整個(gè)過(guò)程,該程序有一定的實(shí)用價(jià)值。通過(guò)本文的學(xué)習(xí),我相信稍有API使用基礎(chǔ)的開(kāi)發(fā)者可以馬上觸類(lèi)旁通,很快掌握Visual C#中對(duì)API的操作。上面給出的實(shí)例僅僅是一個(gè)簡(jiǎn)單的程序,不過(guò)有興趣的讀者可以進(jìn)一步完善其功能,做出更完美的系統(tǒng)應(yīng)用程序。??
總結(jié)
以上是生活随笔為你收集整理的Visual C#设计多功能关机程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用C++访问SQL Server 200
- 下一篇: 有机发光二极管显示器测试方法_有机激光二