Red de conocimiento informático - Conocimiento de la instalación - Buscando un programa de apagado programado escrito en VB6.0

Buscando un programa de apagado programado escrito en VB6.0

Le proporciona un código para forzar el cierre; por supuesto, también puede configurarlo para que espere a que cierren otras aplicaciones o incluso cancelar el cierre de otras aplicaciones.

'****************************************** ********

'Código de formulario:Form1

'La interfaz solo necesita configurar un botón, y el nombre del botón es: Comando1: Comando1

' **************** ******************************* ****

Opción explícita

Const privada SE_PRIVILEGE_ENABLED = &H2

Const privada TOKEN_ ADJUST_PRIVILEGES = &H20

Const privada TOKEN_QUERY = & ;H8

p>

Const privada SE_SHUTDOWN_NAME = "SeShutdownPrivilege"

Const privada EWX_LOGOFF = 0

Const privada EWX_SHUTDOWN = &H1

Const privada EWX_REBOOT = &H2

p>

Const privada EWX_ POWEROFF = &H8

Const privada EWX_RESTARTAPPS = &H40

Const privada EWX_FORCE = &H4

Const privada EWX_FORCEIFHUNG = &H10

LUID de tipo privado

Parte baja siempre

Parte alta siempre

Tipo de fin

Tipo privado LUID_AND_ATTRIBUTES

pLuid como LUID

Atributos siempre que

Tipo de fin

Tipo privado TOKEN_PRIVILEGES

PrivilegeCount siempre

Privilegios(1) como LUID_AND_ATTRIBUTES

Tipo final

Función de declaración privada GetCurrentProcess Lib "kernel32" () Siempre

Función de declaración privada OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle mientras, ByVal DesiredAccess mientras, TokenHandle mientras) Mientras

LPLuid privado como LUID) Siempre

Función de declaración privada AjustarTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle siempre, ByVal DisableAllPrivileges siempre, NewState como TOKEN_PRIVILEGES, ByVal BufferLe

ngth Mientras, ByVal PreviousState Mientras, ByVal ReturnLength Mientras) Mientras

Función de declaración privada Salir de WindowsEx Lib "user32" (ByVal uFlags Mientras, ByVal dwReserved Mientras) Mientras

Subcomando privado1_ Click()

Atenuar hToken mientras

Atenuar TokenPrivilegeLuid como LUID

Atenuar TokenPrivilege como TOKEN_PRIVILEGES

Si MsgBox( "ADVERTENCIA: ¡Esta operación forzará el apagado y se perderán todos los datos no guardados!"

Salir de Sub

End If

If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_ PRIVILEGES O vbCritical, "Warning") = vbCancel Entonces

Salir Sub

Fin si

Si OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_ PRIVILEGES O TOKEN_QUERY, hToken ) = 0 Entonces

MsgBox "Error al obtener el identificador de privilegios del token de acceso", vbExclamation, "Error en la operación"

Salir de la subrutina

Finalizar si

Si LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, TokenPrivilegeLuid) = 0 Entonces

MsgBox "Error al encontrar el privilegio de apagado", vbExclamation, "Error en la operación"

Salga de la subrutina

p>

Fin si

TokenPrivilege.PrivilegeCount = 1

TokenPrivilege.Privileges(0).pLuid = TokenPrivilegeLuid

TokenPrivilege.Privileges(0). Attributes = SE_PRIVILEGE_ENABLED

Si AjustaTokenPrivileges(hToken, False, TokenPrivilege, LenB( TokenPrivilege), 0, 0) = 0 Entonces

MsgBox "Los privilegios de apagado no pudieron surtir efecto", vbExclamation, "Error de operación"

Salir de la subrutina

Finalizar si

si ExitWindowsEx(EWX_ SHUTDOWN o EWX_FORCE, 0) = 0 entonces

MsgBox "Error en la operación de apagado", vbExcla

información, "Error de operación"

Finalizar si

End Sub