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

Visual C#設計多功能關機程序

編輯:C#基礎知識

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

  一. 設計關閉Windows窗體

  1. 界面的設計

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

  控件名類別Text 控件名 類別 TextCheckBox1CheckBox 自動關機 GroupBox1GroupBox當前系統時間CheckBox1CheckBox倒計時執行操作GroupBox2GroupBox 設定時間CheckBox1CheckBox 定時報警TxtTime TextBox  ButCancle Button取消SetupTimeDateTimePicker  ButReOpenButton重新啟動SetupDate DateTimePicker  ButCloseButton 關機 Timer1Timer100ButSysIntoButton系統信息ButReLoginButton注消

  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
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved