Option Explicit
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Const ANYSIZE_ARRAY = 1
Type LUID
LowPart As Long
HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Declare Function GetCurrentProcess Lib "kernel32" () As Long
Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLUID As LUID) As Long
Declare Function AdjustTokenPrivileges Lib "advapi32" (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 SetSystemPowerState Lib "kernel32" (ByVal fSuspend As Long, ByVal fForce As Long) As Long
Private Sub SetShutdownPrivilege()
Dim lpLUID As LUID
Dim lpToken As TOKEN_PRIVILEGES
Dim lpPrevToken As TOKEN_PRIVILEGES
Dim hToken&, r&
r = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken)
r = LookupPrivilegeValue(vbNullString, "SeShutdownPrivilege", lpLUID)
With lpToken
.PrivilegeCount = 1
.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
.Privileges(0).pLuid = lpLUID
End With
r = AdjustTokenPrivileges(hToken, False, lpToken, 4 + (12 * lpToken.PrivilegeCount), lpPrevToken, 4 + (12 * lpPrevToken.PrivilegeCount))
End Sub
Sub SuspendSystem()
Call SetShutdownPrivilege
Call SetSystemPowerState(True, False)
End Sub
Buen ejemplo para obtener privilegios para supsender el sistema ;)
Gracias Anhur por el codigo
Pero me da error en
Tipe LUID
CitarError de compilacion:
No se puede definir un tipo definido por el usuario publico en un modulo de usuario privado
Son librerias que no he utilizado en mi vida...
BenRu abri el Visual Basic , crea un proyecto nuevo , luego9 elimina si queres el Form1 y agrega un Modulo luego selecciona el codigo que puso Anhur y pegalo dentro del Modulo (Module1) y donde dice :
Sub SuspendSystem()
Call SetShutdownPrivilege
Call SetSystemPowerState(True, False)
End Sub
Cambialo por este :
Sub Main()
Call SetShutdownPrivilege
Call SetSystemPowerState(True, False)
End Sub
Y le das ejecutar y listo ...
Dificil ?? xD
Salu2 ! ;)
Eso debería ir en un módulo estándar...
Vamos Ruben, leete un tutorial de VB que te va a ayudar mucho. Aprenda Visual Basic como en primero es muy bueno y explica todas estas cosas.
Saludos.
Ya lo se, lo meti en unmodulo y no va...ni cambiando eso que dices
leete un tutorial de VB que te va a ayudar mucho
Ya lo estoy haciendo.... :P