(1)
SHShutDownDialog函数

用Visual Basic模拟Windows关机的操作,可用shell32API-SHShutDownDialog函数。
该函数的声明方式如下:
Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByVal dwReserved As Long) As Long
程序代码:
(Module1.bas)
Public Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByVal dwReserved As Long) As Long

(Form1.frm)
Private Sub Command1_Click()
SHShutDownDialog 0
End Sub

**************************************************************
**************************************************************
**************************************************************
*******************~~~~~~~~~~~~~~~~~~~~~~~~~******************
*******************~~~~~~~ @      @ ~~~~~~~~******************
***********************@  本为尘世人  @***********************
*******************-------------------------******************
***********************@  枉化天上仙  @***********************
*******************~~~~~~~ @      @ ~~~~~~~~******************
*******************~~~~~~~~~~~~~~~~~~~~~~~~~******************
**************************************************************
**************************************************************
**************************************************************

(2)
SHRestartSystemMB函数

声明方式如下:
'(For Windows NT/2000)
Declare Function SHRestartSystemMBW Lib "shell32"_
Alias "#59"_
(ByVal hWnd As Long,ByVal lpszPrompt As Long,ByVal dwFlags As Long) As Long

'(For Windows 95)
Declare Function SHRestartSystemMBA Lib "shell32"_
Alias "#59"_
(ByVal hWnd As Long,ByVal lpszPrompt As String,ByVal dwFlags As Long) As Long

*********************************************************************************
参数                  类型                       说明
*********************************************************************************
hWnd                  Long                       父窗口的窗口句柄
*********************************************************************************
lpszPrompt            NT:Long/95:String          系统设置变更对话框的提示字符串
*********************************************************************************
dwFlags               Long                       参数
*********************************************************************************

其中loszPrompt代表对话框里所显示的字符串。
参数dwFlags的设置如下表所示:
*********************************************************************************
设置值                    值                     说明
*********************************************************************************
EWX_LOGOFF                0                      注销
*********************************************************************************
EWX_SHUTDOWN              1                      关机
*********************************************************************************
EWX_REBOOT                2                      重新启动计算机
*********************************************************************************
EWX_FORCE                 4                      强迫注销
*********************************************************************************
EWX_POWEROFF              8                      自动关闭电源
*********************************************************************************

范例代码:
(Module1.bas)
Option Explicit

Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const EWX_POWEROFF = 8
'(For Windows NT/2000)
Public Declare Function SHRestartSystemMBW Lib "shell32" Alias "#59" (ByVal hWnd As Long, ByVal lpszPrompt As Long, ByVal dwFlags As Long) As Long
'(for 95)
Public Declare Function SHRestartSystemMBA Lib "shell32" Alias "#59" (ByVal hWnd As Long, ByVal lpszPrompt As String, ByVal dwFlags As Long) As Long
'Detect the Windows Version
Public Const VER_PLATFORM_WIN32s = 0
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
Public Const VER_PLATFORM_WIN32_NT = 2
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 'Maintenance String for pss usage
End Type
Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long



(Form1.frm)
Option Explicit

Private Sub Command1_Click()
Dim dwFlags As Long
If (Option1.Value) Then
dwFlags = EWX_SHUTDOWN
ElseIf (Option2.Value) Then
dwFlags = EWX_REBOOT
Else
dwFlags = EWX_LOGOFF
End If
If (Check1.Value) Then
dwFlags = dwFlags Or EWX_POWEROFF
End If
Dim lpVersionInfo As OSVERSIONINFO
lpVersionInfo.dwOSVersionInfoSize = Len(lpVersionInfo)
Call GetVersionEx(lpVersionInfo)
If (lpVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT) Then
SHRestartSystemMBW Me.hWnd, StrPtr(Text1.Text & vbNullChar), dwFlags Or EWX_FORCE
Else
SHRestartSystemMBA Me.hWnd, Text1.Text & vbNullChar, dwFlags Or EWX_FORCE
End If
End Sub

Private Sub Command2_Click()
End
End Sub