Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Apagar cualquier versión de Windows

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Apagar cualquier versión de Windows Responder citando


// Devuelve false si ha ocurrido algún problema

bool apagarWindows(void)
{
    OSVERSIONINFO osvi;
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx( &osvi );
    if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
    {
        //--- Si estamos en NT/2000/XP obtenemos el permiso necesario del sistema

        HANDLE hToken;
        TOKEN_PRIVILEGES tkp;

        if (!OpenProcessToken(GetCurrentProcess(),
                TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
            return false;

        LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);

        tkp.PrivilegeCount = 1;
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

        AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);

        if (GetLastError() != ERROR_SUCCESS)
            return false;
    }

    //--- Apagamos

    if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0))
        return false;

    return true;
}

---

Probado con BCB5 en Windows 2000 y XP, aunque teóricamente no debería dar problemas en otras versiones, seria bueno que quien pueda probarlo en otras versiones lo confirme.

Volver arriba
Mensaje    Asunto: Responder citando

Hola gente del foro les cuento que probe esta funcion con Builder 4 y win XP o 2000 y funciona perfectamente, ahora sobre 98 lo cuelgay en Me solo reiniciae el explorador. Si alguien sabe como corregirlo...
Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

A mi me paso lo mismo en Win98 y ME, lo que hize fue lo siguiente:

AnsiString linea="C:\WINDOWS\RUNDLL32.EXE USER.EXE,EXITWINDOWS";
WinExec(linea.c_str(),0);

y con eso apaga me windows 98 y ME.


__________
Salu2,
Javier Torres.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

para iniciar sesion en ves de apagar es:

Sustituyendo EWX_POWEROFF por EWX_LOGOFF
_________________
__________________________
C++ RULZ FO' EVA'
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Holas yo e uitilizado para apagar reiniciar y cerrar cesion en desde win95 hasta windows 64(y lo he probado!!!!!!!!) y me funciona lo mas bien
aqui les va

apagar:
Código:

switch(MessageBox(Handle,"Esta Seguro Que Desea Apagar La Pc???","Confirmacion",MB_YESNO | MB_ICONWARNING))
        {
          case ID_YES:ExitWindowsEx(1, 0xffffffff);

          case ID_NO:Abort();
        }


reiniciar:

Código:

switch(MessageBox(Handle,"Esta Seguro Que Desea Reiniciar La Pc???","Confirmacion",MB_YESNO | MB_ICONWARNING))
        {
          case ID_YES:ExitWindowsEx(2, 0xffffffff);
          case ID_NO :Abort(); //Cancel()
        }


cerrar secion:
Código:

switch(MessageBox(Handle,"Esta Seguro Que Desea Cerra Sesion ","Confirmacion",MB_YESNO | MB_ICONWARNING))
        {
          case ID_YES:ExitWindowsEx(0, 0xffffffff);
          case ID_NO :Abort(); //Cancel()
        }

_________________
Salu2
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Ni caso,

Simplemente no estaba con acceso administrador, nada mas, ya funciona.

Un saludo.

Carlos

****************************************

Hola amigos,

Cerrar sesion siempre me ha funcionado bien, pero ahora pruebo en Windows Server 2008 R2 y no va.

Alguien sabe por que?

Hay que cambiar algo?

Saludos.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Comprobado,

Si el usuario no es administrador no funciona, sabéis como hacer que funcione siendo un usuario normal? estoy haciendo que accedan como usuarios normales por escritorio remoto y al salir cierren automáticamente la sesión, pero si es un usuario no funciona.

Un saludo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Modificado con 3 opciones Responder citando

Probado con Windows 10 64bits Creators y con los 3 MODOS y funciona.
Gracias LEO...
Código:

//Función para Apagar, Reiniciar o Cerrar Sesion Windows
bool __fastcall TfV::ApagarWindows(String MODO)
{
    OSVERSIONINFO osvi;
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx( &osvi );
    if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
    {
        //Si estamos en NT/2000/XP obtenemos el permiso necesario del sistema
      HANDLE hToken;
        TOKEN_PRIVILEGES tkp;
        if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
           return false;

        LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
        tkp.PrivilegeCount = 1;
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
        if(GetLastError() != ERROR_SUCCESS)
           return false;
    }

   if(MODO == "Apagar")
    {
       if(!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0))
           return false;
    }
    else
       if(MODO == "Reiniciar")
        {
          if(!ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0))
              return false;
        }
        else
           if(MODO == "Cerrar Sesion")
            {
             if(!ExitWindowsEx(EWX_LOGOFF | EWX_FORCE, 0))
              return false;
            }

    return true;
}
//---------------------------------------------------------------------------

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.