主题:惊!惊!展示两个从未公开过的API关机函数!大家来研究下!
(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
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