Red de conocimiento informático - Material del sitio web - ¿Cómo diseñar un programa de apagado programado usando VB? Por favor adjunte el código~

¿Cómo diseñar un programa de apagado programado usando VB? Por favor adjunte el código~

Categoría: Computadora/Red> Programación> Otros lenguajes de programación

Respuesta:

El siguiente es el programa de cierre que quiero escribir para 98/XP/2000, puedes copiarlo. Usted mismo puede llamar las funciones de apagado y reinicio que escribí. La mayoría de los sistemas operativos actuales son 2000 o /p>

Entre ellos: hay declaraciones de funciones API antes de algunas declaraciones públicas.

Public Sub AdjustToken() Subrutina utilizada para obtener permiso de apagado.

Public Sub Shutdown() 'es una subrutina de apagado

Public Sub Reboot() 'es una subrutina de reinicio

********* ************ El código comienza: *******************

LUID de estructura pública

Dim UsedPart As Integer

Dim IgnoredForNowHigh32BitPart As Integer

Estructura final

Estructura pública LUID _AND_ATTRIBUTES

Atenuar TheLuid como LUID

Atenuar atributos como entero

Estructura final

Estructura pública TOKEN_PRIVILEGES

Atenuar PrivilegeCount como entero

Atenuar TheLuid como LUID

Atributos atenuados como entero

Estructura final

'Función de apagado forzado

Función de declaración pública ExitWindowsEx Lib "user32" (ByVal uFlags como entero, ByVal dwReserved As Integer) As Integer

'La función GetLastError devuelve el último código de error de este hilo. código de error. Los códigos de error se almacenan por subproceso

'Varios subprocesos no sobrescribirán los códigos de error de otros subprocesos.

Función de declaración pública GetLastError Lib "kernel32" () como entero

'La función GetCurrentProcess devuelve el identificador del proceso actual.

Función de declaración pública GetCurrentProcess Lib "kernel32" () como entero

'La función OpenProcessToken abre el token de acceso al proceso.

Función de declaración pública OpenProcessToken Lib "advapi32" (ByVal ProcessHandle como entero, ByVal DesiredAccess como entero, ByRef TokenHandle como entero) como entero

'La función LookupPrivilegeValue obtiene el valor utilizado en un objeto específico Identificador único local (LUID) del sistema

'Indica una prioridad específica.

'UPGRADE_WARNING: El LUID de estructura puede requerir que se pasen propiedades de sellado como parámetros en esta declaración de declaración. Haga clic aquí para obtener más información: "ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1050""

Función de declaración pública LookupPrivilegeValue Lib "advapi32" Alias ​​​​"LookupPrivilegeValueA"(ByVal lpSystemName como cadena, ByVal lpName como cadena, ByRef lpLuid como LUID) como entero

'La función AdjustTokenPrivileges habilita o deshabilita la prioridad del token de acceso especificado.

'Habilitar o deshabilitar privilegios requiere acceso TOKEN_ADJUST_PRIVILEGES.

'UPGRADE_WARNING: La estructura TOKEN_PRIVILEGES puede requerir que se pasen propiedades de sellado como argumentos en esta declaración de declaración. Haga clic aquí para obtener más información: "ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1050""

'UPGRADE_WARNING: la estructura TOKEN_PRIVILEGES puede requerir bloqueo en esta declaración de declaración Las propiedades se pasan como parámetros. PRIVILEGES puede requerir que las propiedades de manejo de sobres se pasen como parámetros en esta declaración.

Haga clic aquí para obtener más información: "ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1050""

Función de declaración pública AjustarTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Integer, ByVal DisableAllPrivileges Como entero, byref newState como token_privileges, byval bufferLength como token_privileges, como token_privileges byval bufferLength como entero, byref anteriorState como token_privileges, byref returnlengm. ger )

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

'* Este proceso establece la prioridad correcta para permitir el apagado o reinicio bajo Windows NT.

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

SubAjusteToken público()

Const TOKEN_ADJUST_ PRIVILEGES Como Corto = H20s

Const TOKEN_QUERY Como Corto = H8s

Const SE_PRIVILEGE_ENABLED Como Corto = H2s

Dim hdlProcessHandle Como Integer

Dim hdlTokenHandle como entero

Dim tmpLuid como LUID

Dim tkp como TOKEN_PRIVILEGES

Dim tkpNewButIgnored como TOKEN_PRIVILEGES

Dim lBufferNeeded como entero

Dim lBufferNeeded como entero

p>

'Utilice la función SetLastError para establecer el código de error en 0.

'Al hacer esto, si no hay ningún error, la función GetLastError devolverá 0

'''''''SetLastError 0

'El proceso GetCurrentProcess La función establecerá la variable hdlProcessHandle

hdlProcessHandle = GetCurrentProcess()

'''''Si GetLastError lt;gt 0 entonces

'''''; MsgBox "GetCurrentProcess error= =" amp; GetLastError

'''''End If

OpenProcessToken(hdlProcessHandle, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hdlTokenHandle)

'' '''Si GetLastError lt; gt; 0 Entonces

'''''MsgBox "OpenProcessToken error==" amp; GetLastError

'''''End If

' Obtiene la prioridad de apagado LUID

LookupPrivilegeValue("", "SeShutdownPrivilege", tmpLuid)

'''''If GetLastError

'''''End If

tkp.PrivilegeCount = 1 'Establecer prioridad

' UPGRADE_WARNING: Error al analizar las propiedades predeterminadas del objeto tkp.TheLuid.

Haga clic para obtener más información: "ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1037""

tkp.TheLuid = tmpLuid

Attributes = SE_PRIVILEGE_ENABLED.

'Habilitar prioridad de apagado para el proceso actual

AjustarTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)

' ''' 'Si GetLastError

'''''MsgBox "AdjustTokenPrivileges error==" & GetLastError

'''''End If

End Sub

Public Sub Shutdown() 'Apagar subrutina

'****************** Según la versión de Windows cerrada** **********************

Si glngWhichWindows32 = mlngWindowsNT Entonces

AjustaToken() 'Llamar a obtener subrutina de prioridad

Finalizar si

Salir de WindowsEx (EWX_SHUTDOWN o EWX_FORCE, y HFFFF)

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

End Sub

Public Sub Reboot() 'Reiniciar subrutina

'****************** ** *** Cerrar según la versión de Windows************************

Si glngWhichWindows32 = mlngWindowsNT Entonces

AjustarToken () 'Llamar a la subrutina de prioridad

End If

ExitWindowsEx(EWX_REBOOT Or EWX_FORCE, amp; HFFFFs)

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

Fin del subtítulo