Programación General > Visual Basic 6.0 e inferiores
Re: Apagar PC en Win XP
Roedor:
Hola amigos, mi pregunta es la siguiente:
Como puedo apagar el PC mediante VB6 si tengo como sistema operativo Windows XP?
Muchísimas gracias.
javierbalk:
Hola Roedor:
Con la API ExitWindowsEx puedes cerrar Windows, creo que funciona en todas las versiones.
Podés consultar su uso en http://www.allapi.net
Saludos,
Javier
_EL_DJ_LU:
Hola ... eso solo me funciona en Win 98..
Lo que estamos buscando es el codigo que apague el windows XP.. y que lo apafue sin pedir permiso.. osea si hay un documento sin guardar.. que lo pase por alto.. y que lo apague..
Muchas gracias a todos...
_EL_DJ_LU:
Hola amigos.. yo nuevamente.. jeje
Bueno pues.. le tengo una buena noticia.. buscando en internet .. encontre los codigos que necesitabamos..
--- Código: Text --- 'Módulo Option Explicit 'Constantes API Private Const EWX_LOGOFF = 0 Private Const EWX_SHUTDOWN = 1 Private Const EWX_REBOOT = 2 Private Const EWX_FORCE = 4 Private Const TOKEN_ADJUST_PRIVILEGES = &H20 Private Const TOKEN_QUERY = &H8 Private Const SE_PRIVILEGE_ENABLED = &H2 Private Const ANYSIZE_ARRAY = 1 Private Const VER_PLATFORM_WIN32_NT = 2 'Estructuras API Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type Public Type LUID LowPart As Long HighPart As Long End Type Public Type LUID_AND_ATTRIBUTES pLuid As LUID Attributes As Long End Type Public Type TOKEN_PRIVILEGES PrivilegeCount As Long Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES End Type 'Declaraciones API Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) _ As Long Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias _ "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As _ String, lpLuid As LUID) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (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 Private Declare Function ExitWindowsEx Lib "user32.dll" (ByVal uFlags As _ Long, ByVal dwReserved As Long) As Long Private Declare Function GetVersionEx Lib "kernel32.dll" Alias _ "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long 'Detecta si el programa funciona en una máquina NT/2000 Public Function IsWinNT() As Boolean Dim myOS As OSVERSIONINFO myOS.dwOSVersionInfoSize = Len(myOS) GetVersionEx myOS IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT) End Function 'Establece el privilegio de apagado a esta aplicación Private Sub EnableShutDown() Dim hProc As Long Dim hToken As Long Dim mLUID As LUID Dim mPriv As TOKEN_PRIVILEGES Dim mNewPriv As TOKEN_PRIVILEGES hProc = GetCurrentProcess() OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID mPriv.PrivilegeCount = 1 mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED mPriv.Privileges(0).pLuid = mLUID 'Confirma el privilegio de apagado para esta aplicación AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * _ mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount) End Sub ' Apaga NT Public Sub ShutDownNT(Force As Boolean) Dim ret As Long Dim Flags As Long Flags = EWX_SHUTDOWN If Force Then Flags = Flags + EWX_FORCE If IsWinNT Then EnableShutDown ExitWindowsEx Flags, 0 End Sub 'Reinicia NT Public Sub RebootNT(Force As Boolean) Dim ret As Long Dim Flags As Long Flags = EWX_REBOOT If Force Then Flags = Flags + EWX_FORCE If IsWinNT Then EnableShutDown ExitWindowsEx Flags, 0 End Sub 'Cierra sesión del usuario actual Public Sub LogOffNT(Force As Boolean) Dim ret As Long Dim Flags As Long Flags = EWX_LOGOFF If Force Then Flags = Flags + EWX_FORCE ExitWindowsEx Flags, 0 End Sub Bueno esto apaga la maquina.. No se si esto es lo que estaban buscando..
Esto no era justamente lo que estaba buscando... El codigo que tenia.. para apagar la PC pero para WIN98 apagaba la PC sin pedir autorizacion.. me refiero si habia un documento sin guardar.. asi mismo lo apagaba.. me entienden?
Bueno pues.. este codigo para el XP no hace eso.. la maquina no se apaga.. si hoy un documento sin guardar..
No se si alguien podria ayudarnos.. a buscar el codigo que apaga la Pc sin importar nada.. es decir.. apagar a la fuerza.. jeje
Bueno muchas gracias por su ayuda.. y espero que el codigo les sirva a muchos...
none123:
Bien gente! Para apagar el XP haciendo doble clic desde un icono de acceso directo es sencillo ya q creamo el icono y donde dice destino ponemos "C:\WINDOWS\system32\shutdown.exe" pudiento agregar al final parametros como por ejemplo "C:\WINDOWS\system32\shutdown.exe" -s -t 8 (esto hace q demore 8 segundos en apagar la PC).
Ahora bien como hacerlo en VB???; pues la solucion es bastante sencilla lo unico q hacemos es llamar al 'valioso' (en este caso) programa shutdown.exe; ni mas ni menos.
Para los mas novatos aqui dejo el codigo de llamado a este programa desde un boton en el frame:
------------------------------------------------------------------------------------
Private Sub Comando1_Click()
On Error GoTo Err_Comando38_Click
Dim stAppName As String
stAppName = "C:\WINDOWS\system32\shutdown.exe"
Call Shell(stAppName, 1)
Exit_Comando38_Click:
Exit Sub
Err_Comando38_Click:
MsgBox Err.Description
Resume Exit_Comando38_Click
End Sub
------------------------------------------------------------------------------------
Bien espero q les sirva y les sea util; no dejen de informar de cualquier inconveniente. Bye
Navegación
[#] Página Siguiente
Ir a la versión completa