Programación General > Visual Basic 6.0 e inferiores

 Re: Apagar PC en Win XP

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa