Ver Mensaje Individual
  #8  
Antiguo 02-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Igual no tienes permisos para ejecutar esas tareas, o tu proceso requiere permisos de administrador.

Me pasó al migrar un programa a XP.

Código Delphi [-]
function TFrmteclas.ShutDownWindows(Flag: Word): Boolean;
var
  TokenPriv: TTokenPrivileges;
  H:         DWord;
  HToken:    THandle;
begin

  Flag := EWX_POWEROFF; // EWX_REBOOT, ETC.

  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    OpenProcessToken(GetCurrentProcess,
      TOKEN_ADJUST_PRIVILEGES, HToken);
    LookUpPrivilegeValue(NIL, 'SeShutdownPrivilege',
      TokenPriv.Privileges[0].Luid);
    TokenPriv.PrivilegeCount := 1;
    TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    H := 0;
    AdjustTokenPrivileges(HToken, FALSE,
      TokenPriv, 0, PTokenPrivileges(NIL)^, H);
    CloseHandle(HToken);
  end;
  Result := ExitWindowsEx(Flag, 0);
end;

Para apagar el monitor basta con:
Código Delphi [-]
  Application.ProcessMessages;
  Sleep(150);
  PostMessage(Application.Handle , WM_SYSCOMMAND, SC_MONITORPOWER,1);
Ojo al Sleep. Se puede procesar el postMessage pero por el ciclo de mensajes, se puede activar de nuevo y aparentar que no hace nada la instrucción.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita