comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Como apagar, reiniciar o salir del sistema

  • 0 Respuestas
  • 1476 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5331
  • Actividad:
    60%
  • Reputación 29
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Julio 26, 2010, 11:24:30 am »
usa la API ExitWindowsEx

Copia todo este codigo en un modulo, despues en tu formulario, o donde lo necesites unicamente llama a las funciones necesarias:

Código: Visual Basic
  1. Option Explicit
  2.  
  3. Public Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
  4. Public Const TOKEN_QUERY As Long = &H8
  5. Public Const SE_PRIVILEGE_ENABLED As Long = &H2
  6.  
  7. Public Const EWX_LOGOFF As Long = &H0
  8. Public Const EWX_SHUTDOWN As Long = &H1
  9. Public Const EWX_REBOOT As Long = &H2
  10. Public Const EWX_FORCE As Long = &H4
  11. Public Const EWX_POWEROFF As Long = &H8
  12. Public Const EWX_FORCEIFHUNG As Long = &H10 '2000/XP only
  13.  
  14. Public Const VER_PLATFORM_WIN32_NT As Long = 2
  15. Public uflags As Long
  16. Public success As Long
  17.  
  18. 'TIPO DE DATOS PARA LAS APIS
  19. Public Type OSVERSIONINFO
  20.   OSVSize         As Long
  21.   dwVerMajor      As Long
  22.   dwVerMinor      As Long
  23.   dwBuildNumber   As Long
  24.   PlatformID      As Long
  25.   szCSDVersion    As String * 128
  26. End Type
  27.  
  28. Public Type LUID
  29.    dwLowPart As Long
  30.    dwHighPart As Long
  31. End Type
  32.  
  33. Public Type LUID_AND_ATTRIBUTES
  34.    udtLUID As LUID
  35.    dwAttributes As Long
  36. End Type
  37.  
  38. Public Type TOKEN_PRIVILEGES
  39.    PrivilegeCount As Long
  40.    laa As LUID_AND_ATTRIBUTES
  41. End Type
  42.  
  43. 'DECLARACION DE LAS APIS A USAR
  44. Public Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
  45. Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
  46. Public Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
  47. Public Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
  48. Public 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
  49. Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
  50.  
  51. 'FUNCION PARA SABER QUE SISTEMA OPERATIVO CORRE
  52. 'returns True if running Windows NT,
  53. 'Windows 2000, Windows XP, or .net server
  54. Public Function IsWinNTPlus() As Boolean
  55.    #If Win32 Then
  56.       Dim OSV As OSVERSIONINFO
  57.       OSV.OSVSize = Len(OSV)
  58.       If GetVersionEx(OSV) = 1 Then
  59.          IsWinNTPlus = (OSV.PlatformID = VER_PLATFORM_WIN32_NT) And (OSV.dwVerMajor >= 4)
  60.       End If
  61.    #End If
  62. End Function
  63.  
  64. 'FUNCION PARA DAR LOS PERMISOS NECESARIOS
  65. Public Function EnableShutdownPrivledges() As Boolean
  66.    Dim hProcessHandle As Long
  67.    Dim hTokenHandle As Long
  68.    Dim lpv_la As LUID
  69.    Dim token As TOKEN_PRIVILEGES
  70.    
  71.    hProcessHandle = GetCurrentProcess()
  72.    
  73.    If hProcessHandle <> 0 Then
  74.    
  75.      'open the access token associated
  76.     'with the current process. hTokenHandle
  77.     'returns a handle identifying the
  78.     'newly-opened access token
  79.      If OpenProcessToken(hProcessHandle, _
  80.                         (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), _
  81.                          hTokenHandle) <> 0 Then
  82.    
  83.         'obtain the locally unique identifier
  84.        '(LUID) used on the specified system
  85.        'to locally represent the specified
  86.        'privilege name. Passing vbNullString
  87.        'causes the api to attempt to find
  88.        'the privilege name on the local system.
  89.         If LookupPrivilegeValue(vbNullString, _
  90.                                  "SeShutdownPrivilege", _
  91.                                  lpv_la) <> 0 Then
  92.          
  93.            'TOKEN_PRIVILEGES contains info about
  94.           'a set of privileges for an access token.
  95.           'Prepare the TOKEN_PRIVILEGES structure
  96.           'by enabling one privilege.
  97.            With token
  98.                .PrivilegeCount = 1
  99.                .laa.udtLUID = lpv_la
  100.                .laa.dwAttributes = SE_PRIVILEGE_ENABLED
  101.             End With
  102.    
  103.            'Enable the shutdown privilege in
  104.           'the access token of this process.
  105.           'hTokenHandle: access token containing the
  106.           '  privileges to be modified
  107.           'DisableAllPrivileges: if True the function
  108.           '  disables all privileges and ignores the
  109.           '  NewState parameter. If FALSE, the
  110.           '  function modifies privileges based on
  111.           '  the information pointed to by NewState.
  112.           'token: TOKEN_PRIVILEGES structure specifying
  113.           '  an array of privileges and their attributes.
  114.           '
  115.           'Since were just adjusting to shut down,
  116.           'BufferLength, PreviousState and ReturnLength
  117.           'can be passed as null.
  118.            If AdjustTokenPrivileges(hTokenHandle, _
  119.                                      False, _
  120.                                      token, _
  121.                                      ByVal 0&, _
  122.                                      ByVal 0&, _
  123.                                      ByVal 0&) <> 0 Then
  124.                                      
  125.               'success, so return True
  126.               EnableShutdownPrivledges = True
  127.    
  128.             End If  'AdjustTokenPrivileges
  129.         End If  'LookupPrivilegeValue
  130.      End If  'OpenProcessToken
  131.   End If  'hProcessHandle
  132. End Function
  133.  
  134. 'FUNCION PARA REINICIAR EL SISTEMA
  135. Public Sub ReiniciarPc()
  136.     uflags = EWX_REBOOT Or EWX_FORCE
  137.     If IsWinNTPlus() Then
  138.         success = EnableShutdownPrivledges()
  139.         If success Then Call ExitWindowsEx(uflags, 0&)
  140.     Else
  141.         '9x system, so just do it
  142.        Call ExitWindowsEx(uflags, 0&)
  143.     End If
  144. End Sub
  145.  
  146.  
  147. 'FUNCIONA PARA APAGAR EL SISTEMA
  148. Public Sub ApagarPc()
  149.     uflags = EWX_POWEROFF Or EWX_FORCE
  150.     If IsWinNTPlus() Then
  151.         success = EnableShutdownPrivledges()
  152.         If success Then Call ExitWindowsEx(uflags, 0&)
  153.         'Shell "shutdown -r -t 0"
  154.    Else
  155.         '9x system, so just do it
  156.        Call ExitWindowsEx(uflags, 0&)
  157.     End If
  158. End Sub
  159.  
  160. 'FUNCION PARA SALIR DEL SISTEMA
  161. Public Sub SalirSistema()
  162.     uflags = EWX_LOGOFF Or EWX_FORCE
  163.     If IsWinNTPlus() Then
  164.         success = EnableShutdownPrivledges()
  165.         If success Then Call ExitWindowsEx(uflags, 0&)
  166.         'Shell "shutdown -r -t 0"
  167.    Else
  168.         '9x system, so just do it
  169.        Call ExitWindowsEx(uflags, 0&)
  170.     End If
  171. End Sub

y para usarlas nomas asi:

Código: Visual Basic
  1. 'PARA REINICIAR EL SISTEMA
  2. Call ReiniciarPc
  3.  
  4. 'PARA APAGAR EL ORDENADOR
  5. Call ApagarPc
« Última modificación: Julio 08, 2011, 10:23:05 am por ANTRAX »


 

¿Te gustó el post? COMPARTILO!



Como leer caracter por caracter de una cadena string

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1331
Último mensaje Julio 26, 2010, 11:42:21 am
por ANTRAX
Cómo ajustar la cadena introducida a formato de hora "00:00:00"

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1419
Último mensaje Julio 26, 2010, 12:36:23 pm
por ANTRAX
Cómo ajustar la cadena introducida a formato numérico: "#,##"

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1112
Último mensaje Julio 26, 2010, 12:38:04 pm
por ANTRAX
Manual de como bloquear CTRL+ALT+SUP, ALT+TAB, Y OTROS con Visual Basic en WinXP

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1752
Último mensaje Julio 26, 2010, 11:11:14 am
por ANTRAX
Llamada de un formulario mediante el nombre como string

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1220
Último mensaje Julio 26, 2010, 04:08:58 pm
por ANTRAX