程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用C#設計多功能關機程序(1)

用C#設計多功能關機程序(1)

編輯:關於C語言

許多軟件都有自動關機功能,特別是在長時間下載的時候,這個功能可是使你不用以守候在計算機前面,而電腦卻能按照您事先的設定自動關閉。現在我們用visual C#來編寫一個多功能的關機程序。該程序具有:定時關機、倒計時關機、關機提醒、系統信息獲取等四項功能, 可設定關機時間精確到秒。並且讓你很快掌握Visual C#中對API的操作程序。

一.設計關閉Windows窗體

1.界面的設計

新建一個標准工程,向工程中增加一個Windows窗體並向窗體中添加如下控件,並分別設置其屬性:

控件名 類別 Text 控件名 類別 Text CheckBox1 CheckBox 自動關機 GroupBox1 GroupBox 當前系統時間 CheckBox1 CheckBox 倒計時執行操作 GroupBox2 GroupBox 設定時間 CheckBox1 CheckBox 定時報警 TxtTime TextBox ButCancle Button 取消 SetupTime DateTimePicker ButReOpen Button 重新啟動 SetupDate DateTimePicker ButClose Button 關機 Timer1 Timer 100 ButSysInto Button 系統信息 ButReLogin Button 注消

Windows窗體界面:

將窗體屬性中的caption設置為"關閉Windows",名稱設置為"frmmain"。

2.在窗體類中引用API函數

API函數是構築Windows應用程序的基石,是Windows編程的必備利器。每一種Windows應用程序開發工具都提供了間接或直接調用了Windows API函數的方法,或者是調用Windows API函數的接口,也就是說具備調用動態連接庫的能力。Visual C#和其它開發工具一樣也能夠調用動態鏈接庫的API函數。

在Visual C#中調用API的基本過程:

首先,在調用API之前,你必須先導入System.Runtime.InteropServices這個名稱空間。該名稱空間包含了在Visual C#中調用API的一些必要集合,具體的方法如下:

using System.Runtime.InteropServices ;
using System.Text ;

在導入了名稱空間後,我們要聲明在程序中所要用到的API函數。我們的程序主要是獲取系統的相關信息,所以用到的API函數都是返回系統信息的。先給出在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"屬性用來從不可控代碼中調用一個方法,它指定了DLL的位置,該DLL中包含調用的外部方法;"kernel32"設定了類庫名;"public"指明函數的訪問類型為公有的;"static"修飾符聲明一個靜態元素,而該元素屬於類型本身而不是指定的對象;"extern"表示該方法將在工程外部執行,同時使用DllImport導入的方法必須使用"extern"修飾符;最後GetWindowsDirectory函數包含了兩個參數,一個為StringBuilder類型的,另一個為int類型的,該方法返回的內容存在於StringBuilder類型的參數中。同時,因為我們在這裡使用到了StringBuilder類,所以在程序的開始處,我們還得添加System.Text這個名稱空間,方法同上。

聲明其它的在程序中所要用到的API函數:

[ DllImport("user32") ]
public static extern long ExitWindowsEx(long uFlags, long dwReserved ) ;
[ DllImport("shell32") ]
public static extern long ShellAbout(long uFlags, long dwReserved ) ;

3.增加窗體類的變量

long dwReserved ;
const int SHUTDOWN = 1 ;
const int REBOOT = 2 ;
const int LOGOFF = 0 ;
long sh ;
int counter , n ;

4.編寫窗體類的方法

在窗體的Load(事件過程中編寫如下代碼:

private void frmmain1_Load(object sender, System.EventArgs e )
{
file://用系統時間初始化組件
Time.Text = System.DateTime.Today.ToShortDateString( ) + " "+ System.DateTime.Today.ToLongTimeString( ) ;
}
  在組件Timer1的OnTimer事件過程中編寫如下代碼:
/ / 在組件Timer1的OnTimer事件過程中編寫如下代碼:
private void Timer1_Timer(object sender, System.EventArgs e )
{
file://接收當前日期和時間,用於即時顯示
string CurrDate=System.DateTime.Today.ToShortDateString( ) ;
string CurrTime=System.DateTime.Today.ToShortTimeString( ) ;
file://隨時檢測設定的關機日期和時間是否有效
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) ; }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved