Reboot Computer in VB6 (Visual Basic)

Ok heres a simple one.

Here is what im doing for log off:

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Const EWX_LOGOFF = 0
Private Const EWX_REBOOT = 2

Private Sub lnkLogOff_Click()
ExitWindowsEx EWX_LOGOFF, 0
End Sub

Private Sub lnkRestart_Click()
ExitWindowsEx EWX_REBOOT, 0
End Sub

Reboot doesn't work... what is up? Ive seen this post countless times, but the reboot feature doesn't work! it only logs me off! Any ideas?
lpyzrAsked:
Who is Participating?
 
Carl TawnConnect With a Mentor Systems and Integration DeveloperCommented:
If your running NT or 2000 then it won't.  Reboot requires SE_SHUTDOWN_NAME privileges, which, by default, VB doesn't have.

This article will show you how yo set the relevant permissions:

http://support.microsoft.com/default.aspx?scid=kb;en-us;176695


Hope this helps
0
 
mladenoviczCommented:
  Option Explicit

Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
Private Const TOKEN_QUERY As Long = &H8
Private Const SE_PRIVILEGE_ENABLED As Long = &H2

Private Const EWX_LOGOFF As Long = &H0
Private Const EWX_SHUTDOWN As Long = &H1
Private Const EWX_REBOOT As Long = &H2
Private Const EWX_FORCE As Long = &H4
Private Const EWX_POWEROFF As Long = &H8

Private Const VER_PLATFORM_WIN32_NT As Long = 2

Private Type OSVERSIONINFO
  OSVSize         As Long
  dwVerMajor      As Long
  dwVerMinor      As Long
  dwBuildNumber   As Long
  PlatformID      As Long
  szCSDVersion    As String * 128
End Type

Private Type LUID
   dwLowPart As Long
   dwHighPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
   udtLUID As LUID
   dwAttributes As Long
End Type

Private Type TOKEN_PRIVILEGES
   PrivilegeCount As Long
   laa As LUID_AND_ATTRIBUTES
End Type
     
Private Declare Function ExitWindowsEx Lib "user32" _
   (ByVal dwOptions As Long, _
   ByVal dwReserved As Long) As Long

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function OpenProcessToken Lib "advapi32" _
  (ByVal ProcessHandle As Long, _
   ByVal DesiredAccess As Long, _
   TokenHandle As Long) As Long

Private Declare Function LookupPrivilegeValue Lib "advapi32" _
   Alias "LookupPrivilegeValueA" _
  (ByVal lpSystemName As String, _
   ByVal lpName As String, _
   lpLuid As LUID) As Long

Private Declare Function AdjustTokenPrivileges Lib "advapi32" _
  (ByVal TokenHandle As Long, _
   ByVal DisableAllPrivileges As Long, _
   NewState As TOKEN_PRIVILEGES, _
   ByVal BufferLength As Long, _
   PreviousState As Any, _
   ReturnLength As Long) As Long

Private Declare Function GetVersionEx Lib "kernel32" _
   Alias "GetVersionExA" _
  (lpVersionInformation As OSVERSIONINFO) As Long
 
 
 
 

Private Function IsWinNTPlus() As Boolean

#If Win32 Then
 
      Dim OSV As OSVERSIONINFO
   
      OSV.OSVSize = Len(OSV)
   
      If GetVersionEx(OSV) = 1 Then

         IsWinNTPlus = (OSV.PlatformID = VER_PLATFORM_WIN32_NT) And _
                       (OSV.dwVerMajor >= 4)
      End If

   #End If

End Function


Private Function EnableShutdownPrivledges() As Boolean

   Dim hProcessHandle As Long
   Dim hTokenHandle As Long
   Dim lpv_la As LUID
   Dim token As TOKEN_PRIVILEGES
   
   hProcessHandle = GetCurrentProcess()
   
   If hProcessHandle <> 0 Then

If OpenProcessToken(hProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hTokenHandle) <> 0 Then

If LookupPrivilegeValue(vbNullString, "SeShutdownPrivilege", lpv_la) <> 0 Then

With token
               .PrivilegeCount = 1
               .laa.udtLUID = lpv_la
               .laa.dwAttributes = SE_PRIVILEGE_ENABLED
            End With
   
If AdjustTokenPrivileges(hTokenHandle, False, token, ByVal 0&, ByVal 0&, ByVal 0&) <> 0 Then
                                   
EnableShutdownPrivledges = True
   
            End If
End If
End If
End If

End Function



Private Sub Command1_Click()
   Dim uflags As Long
   Dim success As Long
   'force shutdown
uflags = EWX_FORCE
If IsWinNTPlus() Then
   
      success = EnableShutdownPrivledges()
      If success Then Call ExitWindowsEx(uflags, 0&)
         
   Else

Call ExitWindowsEx(uflags, 0&)
     
   End If
End Sub

Private Sub Command2_Click()
   Dim uflags As Long
   Dim success As Long
   'log off
uflags = EWX_LOGOFF
If IsWinNTPlus() Then
   
      success = EnableShutdownPrivledges()
      If success Then Call ExitWindowsEx(uflags, 0&)
         
   Else

Call ExitWindowsEx(uflags, 0&)
     
   End If
End Sub

Private Sub Command3_Click()
   Dim uflags As Long
   Dim success As Long
    'shut down
uflags = EWX_SHUTDOWN
If IsWinNTPlus() Then
   
      success = EnableShutdownPrivledges()
      If success Then Call ExitWindowsEx(uflags, 0&)
         
   Else

Call ExitWindowsEx(uflags, 0&)
     
   End If

End Sub

Private Sub Command4_Click()
   Dim uflags As Long
   Dim success As Long
   'reboot
uflags = EWX_REBOOT
If IsWinNTPlus() Then
   
      success = EnableShutdownPrivledges()
      If success Then Call ExitWindowsEx(uflags, 0&)
         
   Else

Call ExitWindowsEx(uflags, 0&)
     
   End If
End Sub

Private Sub Command5_Click()
   Dim uflags As Long
   Dim success As Long
   'power off za gasenje windowsa
uflags = EWX_POWEROFF
If IsWinNTPlus() Then
   
      success = EnableShutdownPrivledges()
      If success Then Call ExitWindowsEx(uflags, 0&)
         
   Else

Call ExitWindowsEx(uflags, 0&)
     
   End If

End Sub
0
 
EDDYKTCommented:
Try

Public Const EWX_SHUTDOWN = 1
0
 
ark4877Commented:
try this link, hope this solves ur problem


http://www.vb-helper.com/howto_shutdown_windows.html
0
All Courses

From novice to tech pro — start learning today.