我的系统是Windows 2000 ,我想在vb中编程控制机器重新启动应该怎么做?
请各位帮帮忙,谢谢!
请各位帮帮忙,谢谢!
解决方案 »
- 请问VB点击Form1里的WebBrowser1在Form2里的WebBrowser1显示内容,谢谢!
- 新手问题.如果xls中有vba的宏,用代码是不是不能读取
- 有谁知道如何打开其他程序并且把其他程序隐藏起来,但是又可用!
- 如何表示一个记录集的当前记录
- 关于sql查询的一个问题,急!
- 怎样用VB打开word文件,并插入一个图片到该word文件
- vb 引用水晶报表 的问题:
- 请教大家一个开发中遇到的问题!
- 如何在,ACCESS 中用VBA取得当前的路径
- *********************请各位大侠"VB的CLIENT如何用WINSOCK与JAVA的SVR通讯?"来者有分噢!!!****************************谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!
- 有没有关于VB调试方面的知识介绍一下啊?
- 如何实现“考试系统中对录入的汉字自动判断正误及评分”?
Option ExplicitPublic Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As LongPublic Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As Long, ReturnLength As Long) As Long
Public Declare Function GetTokenInformation Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal TokenInformationClass As Long, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long
Public Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LARGE_INTEGER) As LongPublic Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Const EWX_LOGOFF = 0 '注销当前用户
Public Const EWX_POWEROFF = 8 '关闭系统并关闭电源
Public Const EWX_SHUTDOWN = 1 '关闭系统使之能安全关闭电源
Public Const EWX_REBOOT = 2 '关闭系统并重启
Public Const EWX_FORCE = 4 '应用程序强制关闭
Public Const EWX_FORCEIFHUNG = 16 '如果应用程序已挂起,强制关闭Public Const SE_PRIVILEGE_ENABLED = &H2
Public Const SE_PRIVILEGE_ENABLED_BY_DEFAULT = &H1
Public Const SE_PRIVILEGE_USED_FOR_ACCESS = &H80000000Public Const TOKEN_ADJUST_PRIVILEGES = &H20
Public Const TOKEN_QUERY_SOURCE = &H10
Public Const TOKEN_QUERY = &H8Public Const ANYSIZE_ARRAY = 1Public Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"Public Const PROCESS_SET_INFORMATION = &H200
Public Const PROCESS_QUERY_INFORMATION = &H400Public Type LARGE_INTEGER
lowpart As Long
highpart As Long
End TypePublic Type LUID
lowpart As Long
highpart As Long
End Type
Public Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Public Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(0) As LUID_AND_ATTRIBUTES
End TypePublic Sub Shutdown(ByVal flag) '关机
Dim lAPIReturn As Long
Dim tTOKPRI As TOKEN_PRIVILEGES
Dim tLUID As LUID
Dim tLarInt As LARGE_INTEGER
Dim lRequired As Long
Dim hTokHan As Long
Dim hProcess As Long
If LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, tLarInt) = 0 Then
MsgBox "Get LUID error!", vbOKOnly, "Error"
Exit Sub
End If
tLUID.highpart = tLarInt.highpart
tLUID.lowpart = tLarInt.lowpart
tTOKPRI.PrivilegeCount = 1
tTOKPRI.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
tTOKPRI.Privileges(0).pLuid = tLUID
hProcess = GetCurrentProcess()
lAPIReturn = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hTokHan)
lAPIReturn = AdjustTokenPrivileges(hTokHan, 0, tTOKPRI, Len(tTOKPRI), 0, 0)
' lAPIReturn = ExitWindowsEx(EWX_LOGOFF, 0)
' lAPIReturn = ExitWindowsEx(EWX_SHUTDOWN, 0)
'lAPIReturn = ExitWindowsEx(EWX_POWEROFF, 0)
' lAPIReturn = ExitWindowsEx(EWX_REBOOT, 0)
' lAPIReturn = ExitWindowsEx(EWX_FORCE, 0)
' lAPIReturn = ExitWindowsEx(EWX_FORCEIFHUNG, 0)
lAPIReturn = ExitWindowsEx(flag, 0)
If lAPIReturn = 0 Then
MsgBox "Function calling error!", vbOKOnly, "错误"
End If
lAPIReturn = CloseHandle(hTokHan)End Sub'************************************************************
'窗体:
Option Explicit
'Command1是一个控件数组
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
Shutdown EWX_LOGOFF'注销
Case 1
Shutdown EWX_SHUTDOWN'关机
Case 2
Shutdown EWX_REBOOT'重启
End Select
End SubPrivate Sub Command2_Click()
Me.Hide
End
End Sub
Option Explicit
'声明API函数
Private Declare Function SHRestartSystemMB Lib "shell32" Alias "#59" (ByVal hOwner As Long, ByVal sExtraPrompt As String, ByVal uFlags As Long) As Long
'定义系统重新启动常量参数
Private Const SystemChangeRestart = 4'通用系统启动过程
Public Sub SettingsChanged(FormName As Form)
SHRestartSystemMB FormName.hWnd, vbNullString, SystemChangeRestart
End SubPrivate Sub Command1_Click()
'调用例程
SettingsChanged Form1
End Sub