• Jueves 28 de Marzo de 2024, 16:41

Autor Tema:  Re: Apagar PC en Win XP  (Leído 4021 veces)

Roedor

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Apagar PC en Win XP
« en: Miércoles 11 de Diciembre de 2002, 20:49 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 142
  • Nacionalidad: 00
    • Ver Perfil
    • Print preview y grabar PDF en Visual Basic 6
Apagar PC en Win XP
« Respuesta #1 en: Miércoles 11 de Diciembre de 2002, 23:20 »
0
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

  • Miembro activo
  • **
  • Mensajes: 78
    • Ver Perfil
Re: Apagar PC en Win XP
« Respuesta #2 en: Viernes 25 de Febrero de 2005, 15:48 »
0
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

  • Miembro activo
  • **
  • Mensajes: 78
    • Ver Perfil
Re: Apagar PC en Win XP
« Respuesta #3 en: Sábado 26 de Febrero de 2005, 04:41 »
0
Hola amigos.. yo nuevamente.. jeje

Bueno pues.. le tengo una buena noticia.. buscando en internet .. encontre los codigos que necesitabamos..

Código: Text
  1.  'Módulo
  2.       Option Explicit
  3.  
  4.       'Constantes API
  5.       Private Const EWX_LOGOFF = 0
  6.       Private Const EWX_SHUTDOWN = 1
  7.       Private Const EWX_REBOOT = 2
  8.       Private Const EWX_FORCE = 4
  9.       Private Const TOKEN_ADJUST_PRIVILEGES = &H20
  10.       Private Const TOKEN_QUERY = &H8
  11.       Private Const SE_PRIVILEGE_ENABLED = &H2
  12.       Private Const ANYSIZE_ARRAY = 1
  13.       Private Const VER_PLATFORM_WIN32_NT = 2
  14.  
  15.       'Estructuras API
  16.       Type OSVERSIONINFO
  17.           dwOSVersionInfoSize As Long
  18.           dwMajorVersion As Long
  19.           dwMinorVersion As Long
  20.           dwBuildNumber As Long
  21.           dwPlatformId As Long
  22.           szCSDVersion As String * 128
  23.       End Type
  24.  
  25.       Public Type LUID
  26.           LowPart As Long
  27.           HighPart As Long
  28.       End Type
  29.  
  30.       Public Type LUID_AND_ATTRIBUTES
  31.           pLuid As LUID
  32.           Attributes As Long
  33.       End Type
  34.  
  35.       Public Type TOKEN_PRIVILEGES
  36.           PrivilegeCount As Long
  37.           Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
  38.       End Type
  39.  
  40.       'Declaraciones API
  41.       Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
  42.       Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) _
  43.       As Long
  44.       Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias _
  45.       "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As _
  46.       String, lpLuid As LUID) As Long
  47.       Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal _
  48.       TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As _
  49.       TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As _
  50.       TOKEN_PRIVILEGES, ReturnLength As Long) As Long
  51.       Private Declare Function ExitWindowsEx Lib "user32.dll" (ByVal uFlags As _
  52.       Long, ByVal dwReserved As Long) As Long
  53.       Private Declare Function GetVersionEx Lib "kernel32.dll" Alias _
  54.       "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
  55.  
  56.       'Detecta si el programa funciona en una máquina NT/2000
  57.       Public Function IsWinNT() As Boolean
  58.           Dim myOS As OSVERSIONINFO
  59.  
  60.           myOS.dwOSVersionInfoSize = Len(myOS)
  61.           GetVersionEx myOS
  62.           IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
  63.       End Function
  64.  
  65.       'Establece el privilegio de apagado a esta aplicación
  66.       Private Sub EnableShutDown()
  67.           Dim hProc As Long
  68.           Dim hToken As Long
  69.           Dim mLUID As LUID
  70.           Dim mPriv As TOKEN_PRIVILEGES
  71.           Dim mNewPriv As TOKEN_PRIVILEGES
  72.  
  73.           hProc = GetCurrentProcess()
  74.           OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
  75.           LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID
  76.           mPriv.PrivilegeCount = 1
  77.           mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
  78.           mPriv.Privileges(0).pLuid = mLUID
  79.           'Confirma el privilegio de apagado para esta aplicación
  80.           AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * _
  81.       mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
  82.       End Sub
  83.  
  84.       ' Apaga NT
  85.       Public Sub ShutDownNT(Force As Boolean)
  86.           Dim ret As Long
  87.           Dim Flags As Long
  88.  
  89.           Flags = EWX_SHUTDOWN
  90.           If Force Then Flags = Flags + EWX_FORCE
  91.           If IsWinNT Then EnableShutDown
  92.           ExitWindowsEx Flags, 0
  93.       End Sub
  94.  
  95.       'Reinicia NT
  96.       Public Sub RebootNT(Force As Boolean)
  97.           Dim ret As Long
  98.           Dim Flags As Long
  99.  
  100.           Flags = EWX_REBOOT
  101.           If Force Then Flags = Flags + EWX_FORCE
  102.           If IsWinNT Then EnableShutDown
  103.           ExitWindowsEx Flags, 0
  104.       End Sub
  105.  
  106.       'Cierra sesión del usuario actual
  107.       Public Sub LogOffNT(Force As Boolean)
  108.           Dim ret As Long
  109.           Dim Flags As Long
  110.  
  111.           Flags = EWX_LOGOFF
  112.           If Force Then Flags = Flags + EWX_FORCE
  113.           ExitWindowsEx Flags, 0
  114.       End Sub
  115.  
  116.  
  117.  
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

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Re: Apagar PC en Win XP
« Respuesta #4 en: Domingo 27 de Febrero de 2005, 23:47 »
0
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

Last Dragon

  • Miembro MUY activo
  • ***
  • Mensajes: 109
    • Ver Perfil
    • http://www.lastdragon.net
Re: Apagar PC en Win XP
« Respuesta #5 en: Lunes 28 de Agosto de 2006, 01:47 »
0
Cita de: "_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...
Este post tiene mas de un año, pero retomando el tema

Tenia tiempo que no usaba el api ExitWindows ni ExitWindowsEx

En XP funciona pero solo funciona el valor 0 y el valor 8

0 es cerrar sesion
8 es cerrar sesion pasandose por alto cualquier documento no guardado, ya no recuerdo si en versiones anterioes de windows el 8 apagaba windows, pero en XP solo cierra la sesion a la fuerza.

alguien sabe si hay algun nuevo api u otro valor ademas de los conocidos 0,1,2,4,8 que funcionen todos en Windows XP?

Se me ocurre un modulo o servicio para que cada que se prenda la maquina pida una segunda contraseña para mantener la sesion abierta, como un segundo paso de seguridad para las maquinas windows especialmente para laptops
Servidor Personal de Last Dragon



www.lastdragon.net

esteche

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Apagar PC en Win XP
« Respuesta #6 en: Lunes 4 de Septiembre de 2006, 06:46 »
0
Bueno amigos sólo quiero agregar referente al tema del apagado, he estado buscando la manera de apagarlo el winxp y la mas sencilla de todas es esta y me funciona.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Command1_Click()
'APAGAR                                    
Shell ("C:\Windows\System32\shutdown.exe -s -t 00")    
End Sub                                                                  
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Command1_Click()
'REINICIAR                                  
Shell ("C:\Windows\System32\logoff.exe")    
End Sub    
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Espero que les sirva.

Atentamente., Desde Paraguay, Esteche.  :hola:

Last Dragon

  • Miembro MUY activo
  • ***
  • Mensajes: 109
    • Ver Perfil
    • http://www.lastdragon.net
Re: Apagar PC en Win XP
« Respuesta #7 en: Lunes 4 de Septiembre de 2006, 17:37 »
0
Supongo que debe servir, aunque no es una solucion muy elegante.

habria que meterle variables de entorno por el caso en que windows no estuviera instalado en C:\Windows

aunque supongo que a falta de un api funcional, esto es lo que se puede usar
Servidor Personal de Last Dragon



www.lastdragon.net

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.