top
Loading...
重新啟動計算機的實現

在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的屬性。


作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗