操作重新启动,用什么API呢?

解决方案 »

  1.   

    frame1 、Option1(0)、 Option1(1)、Option1(2)、Option1(3)、command1
    'module codeOption ExplicitDeclare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As LongPublic Const EWX_LOGOFF = 0 '注销
    Public Const EWX_SHUTDOWN = 1 '关机
    Public Const EWX_REBOOT = 2 '重启
    Public Const EWX_FORCE = 4 '强制关机Public Const TOKEN_ADJUST_PRIVILEGES = &H20
    Public Const TOKEN_QUERY = &H8
    Public Const SE_PRIVILEGE_ENABLED = &H2
    Public Const ANYSIZE_ARRAY = 1Type LUID
        lowpart As Long
        highpart As Long
    End TypeType LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
    End TypeType TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End TypeDeclare Function GetCurrentProcess Lib "kernel32" () As Long
    Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
    Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
    Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As LongSub CloseWindowFor98ForXP()    Dim hdlProcessHandle As Long
        Dim hdlTokenHandle As Long
        Dim tmpLuid As LUID
        Dim tkp As TOKEN_PRIVILEGES
        Dim tkpNewButIgnored As TOKEN_PRIVILEGES
        Dim lBufferNeeded As Long
      
        hdlProcessHandle = GetCurrentProcess()
        OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _
                         TOKEN_QUERY), hdlTokenHandle    LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
        tkp.PrivilegeCount = 1
        tkp.Privileges(0).pLuid = tmpLuid
        tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED    AdjustTokenPrivileges hdlTokenHandle, False, tkp, _
                              Len(tkpNewButIgnored), tkpNewButIgnored, _
                              lBufferNeeded
     End Sub'form codeOption Explicit
    Dim i As IntegerPrivate Sub Command1_Click()
        CloseWindowFor98ForXP
        Select Case i
            Case 1
                ExitWindowsEx EWX_LOGOFF, 0
            Case 2
                ExitWindowsEx EWX_SHUTDOWN, 0
            Case 3
                ExitWindowsEx EWX_REBOOT, 0
            Case 4
                ExitWindowsEx EWX_FORCE, 0
        End Select
    End Sub
    Private Sub Option1_Click(Index As Integer)
        i = Index
    End Sub
      

  2.   

    http://community.csdn.net/Expert/ForumList_Search.asp?searchtype=1&bigclassid=51&smallclassid=5101&searchKeys=%B9%D8%BB%FA&author=&tabletype=now
    搜索的,看看