重新啟動計算機的實現
在Windows下安裝過程序的用戶可能都有這樣的體會,當安裝完某些應用程序后,安裝程序會要求重新啟動計算機以使設置生效。那么,如果要用VB程序重新啟動計算機該如何實現呢?其實利用ExitWindowsEx函數即可。
程序的編寫
1.首先運行VB,然后新建一個工程(工程類型為標準EXE),然后雙擊Form1窗體,進入代碼(Code)輸入框,在其中輸入:
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long)As Long
2.點擊“工具箱”中的commandbutton(命令按鈕)工具,即可在窗體Form1中加入一個命令按鈕,然后將該按鈕屬性中的Caption值定義為“重新啟動”。完成之后雙擊該按鈕,進入代碼(code)輸入框輸入以下代碼:
| Private Sub Command1_Click() ExitWindowsEx &H43,0 End Sub |
程序的執行
程序輸入完成后,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,然后點擊“重新啟動”按鈕,即可重新啟動計算機。
二、磁盤格式化
在Windows 9X中,當用鼠標右鍵單擊“我的電腦”中的“3.5軟盤A”然后在出現的右鍵菜單中選擇“格式化”選項,就將彈出標準的“磁盤格式化”窗口。下面我們來看看如何在應用程序中利用函數輕松調用Windows 95標準的“磁盤格式化”窗口,實現對磁盤相應的操作功能。
程序的編寫
1.與上例相同,首先運行VB,新建一個標準工程,然后利用“工具箱”在Form1窗體中加入一個命令按鈕對象,將該命令按鈕屬性中的Caption值定義為“軟盤格式化”。完成之后雙擊該按鈕,在代碼輸入框中輸入以下代碼:
| Private Sub Command1_Click()Call FormatFloppy '調用FormatFloppy過程 End Sub |
2.然后用鼠標右擊窗體,選擇右鍵菜單中的“添加/添加模塊”選項,然后在出現的選擇框中選擇“模塊”類型,接著在出現的模塊代碼輸入框中加入以下代碼:(注:模塊是指一組聲明的集合,其后為過程)
'通用聲明
| Public Const WM_CLOSE=&H10 Declare Function FindWindow Lib "user32" Alias"FindWindowA"(ByVal lpClassName As Any, ByVal lpWindowName As Any)As Long Delare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long Declare Function SetWindowPos Lib "user32"(BvVal hwnd As Long ByVal hWndInsertAfter As Long, ByVal X As long, ByVal y As Long, ByVal cx As Long,ByVal cy As Long, ByVal wFlags As Long) As Long Declare Function GetDesktopWindow Lib "user32"() As Long Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long)As Long Declare Function GetWindowRect Lib "user32"(ByVay hwnd As Long, lpRect As RECT) As Long Declare Sub Sleep Lib "kernel32" (ByValdwMilliseconds As Long) Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type TypePOINTAPI X As Long y As Long End Type Const SWP_NOSIZE=&H1 Const SWP_NOZORDER=&H4 'FormatFloppy()過程聲明 Public Sub FormatFloppy() Dim sBuffer As String, Windir As String, Procs As String, X Dim lResult As Long sBuffer = String$(255,0) lResult = GetWindowsDirectory(sBuffer, Len(sBuffer)) Windir = Trim(sBuffer) Procs = Left(Windir, lResult) & "undll32.exe shell32.dll,SHFormatDrive" Call CenterDialog("Format - 3? Floppy (A:)") X = Shell(Procs,1) Call CenterDialog("Format - 3? Floppy (A:)") k = LockWindowUpdate(0) End Sub CenterDialog 過程聲明 Public Sub CenterDialog(WinText As String) DoEvents On Error Resume Next Dim D3 As Long D3 = LockWindowUpdate(GetDesktopWindow()) Dim wdth% Dim hght% Dim Scrwdth% Dim Scrhght% Dim lpDlgRect As RECT Dim lpdskrect As RECT Dim hTaskBar As Long hTaskBar = FindWindow(0&,WinText) Call GetWindowRect(hTaskBar, lpDlgRect) wdth% = lpDlgRect.Right - lpDlgRect.Left hght% = lpDlgRect.Bottom - lpDlgRect.Top Call GetWindowRect(GetDesktopWindow(),lpdskrect) Scrwdth% = lpdskrect.Right - lpdskrect.Left Scrhght% = lpdskrect.Bottom - lpdskrect.Top X% = (Scrwdth% - wdth%) / 2 y% = (Scrhght% - hght%) / 2 Call SetWindowPos(hTaskBar, 0, X%, y%,0,0, SWP_NOZORDER Or SWP_NOSIZE) DoEvents End Sub |
程序的執行
程序輸入完成后,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,點擊“軟盤格式化”按鈕后選擇要格式化的容量,即可對3.5英寸盤進行格式化操作。三、調用版本信息框
在Windows程序中,點擊“幫助”菜單中的“關于XXX”選項后,就會彈出該程序的版本信息框。其實,在VB中,調用shellAbout函數不但可以實現標準的軟件版本信息框,還可以隨意更改其中的內容呢!
程序的編寫
1.與前面類似,首先運行VB并新建一個標準工程,然后雙擊Form1窗口,在代碼輸入框中輸入ShellAbout過程代碼:
| Private Declare Function ShellAbout Lib "shell32.dlI" Alias "ShellAboutA" (ByVal hWnd As Long, ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Long) As Long |
其中ShellAbout聲明如下:
HWnd設置窗口句柄,szApp設置窗口的“Caption”,szOtherStuff在“版權所有”和“使用權”之間的空白處增加額外說明。
2.然后利用“工具箱”在Form1窗體中加入一個命令按鈕對象,將該命令按鈕屬性中的Caption值定義為“版本信息框”。完成之后雙擊該按鈕,在代碼輸入框輸入以下代碼:
Private Sub Command1_Click()
Call ShellAbeut(hWnd, "何發武天使工作室!","版本信息框" & VbCrLf & "上帝與你同在!阿彌陀佛!",0)
End Sub
程序的執行
程序輸入完成后,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,點擊“版本信息框”按鈕,即可查看當前軟件的版本信息。
查看“屬性”
在Windows 9X中,增加了一個全新的概念--“屬性”,每個對象都擁有自己的“屬性”,在“屬性”窗口里是關于對象的詳細描述,并且不同的對象“屬性”窗口的說明是不同的。我們可以用ShellExecuteEX函數直接調用“屬性”標準窗口。下面的程序功能相當于用鼠標右鍵單擊根目錄下的“Autoexec.bat”并選擇“屬性”時,彈出的標準“屬性”窗口。
程序的編寫
1.首先運行VB,然后新建一個標準工程,然后利用“工具箱”在Form1窗體中加入一個命令按鈕對象,將該命令按鈕屬性中的Caption值定義為“屬性按鈕”。完成之后雙擊該按鈕,在代碼輸入框中輸入以下代碼:
| Private Sub Command1_Click() Dim r As Long Dim FileName As String FileName = "c:autoexec.bat" r=ShowProperties(FileName,Me.hwnd) If r<=32 Then MsgBox "Error! NO c:autoexec.bat File" End SuB |
2.然后用鼠標右擊窗體,選擇右鍵菜單中的“添加/添加模塊”選項,然后在出現的選擇框中選擇“模塊”類型,接著在出現的模塊代碼輸入框中加入以下代碼:
| '通用聲明 Option Explicit Type SHELLEXECUTEINFO cbSize As long Fmask As Long hwnd As Long lpVerb As String lpFile As String lpParameters As String lpDirectory As String nShow As Long hInstApp As Long lpIDList As Long lpClass As String hkeyClass As Long dwHotKey As Long hIcon As Long hProcess As Long End Type Public Const SEE_MASK_INVOKEIDLIST = &HC Public Const SESE_MASK_NOCLOSEPROCESS=&H40 Public Const SEE_MASK_FLAG_NO_UI = &H400 Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long 'ShowProperties過程 Public Function ShowProperties(FileName As String, OwnerhWnd As Long) As Long Dim SEI AS SHELLEXECUTEINFO Dim r As Long With SEI .cbSize = Len(SEI) .fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI .hwnd = OwnerhWnd .lpVerb = "properties" .lpFile = FileName .lpParameters = vbNullChar .lpDirectory = vbNullChar .nShow = 0 .hInstApp = 0 .lpIDList = 0 End With r = ShellExecuteEX(SEI) ShowProperties = SEI.hInstApp End Function |
程序的執行
程序輸入完成后,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,點擊“屬性按鈕”按鈕,即可查看C:AUTOEXEC.BAT的屬性。