我的系统是Windows 2000 ,我想在vb中编程控制机器重新启动应该怎么做?
请各位帮帮忙,谢谢!

解决方案 »

  1.   

    http://www.csdn.net/Develop/Read_Article.asp?Id=7025
      

  2.   

    不对,这种方法可用于Windows 98 ,但是我要在Windows 2000下怎么做啊?
      

  3.   

    模块:
    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
      

  4.   

    '快速调用“系统重新启动对话框” :
    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