Desactivar la combinación de teclas Ctrl+Alt+Supr

5129 vistas

Veamos qué código nos puede permitir desactivar la combinación Ctrl+Alt+Supr

Cabe destacar que la acción a realizar dependerá de la versión de Windows, por lo que primero tendremos que determinarla:



delphi
  1. (******************************************************************************)
  2. (* Función para determinar la versión de Windows                              *)
  3. (* Devuelve True si la versión es Windows NT, 2000, XP, sinó devuelve False  *)
  4. (******************************************************************************)
  5. function DeterminarVersionWindows: Boolean;
  6. begin
  7.   Result := True;
  8.   case Win32MajorVersion of
  9. //    3: Microsoft Windows NT 3.51
  10.     4: case Win32MinorVersion of
  11.         0: case Win32Platform of
  12.               1: Microsoft Windows 95 ou Microsoft Windows 95 OSR2
  13.               2: Result := True;
  14.               else
  15.                 Result := False;
  16.             end;
  17.         10, 90: Result := False;
  18.         else
  19.           Result := False;
  20.       end;
  21.     5: case Win32MinorVersion of //2000, XP et 2003
  22.         0, 1, 2:  Result := True;
  23.         else
  24.           Result := False;
  25.       end;
  26.     else
  27.       Result := False;
  28.   end;
  29. end;



Y ahora una función para activar o desactivar la gestión de la combinación de teclas:



delphi
  1. (******************************************************************************)
  2. (* función para des/activar la combinación Ctrl+Alt+Supr                      *)
  3. (* Si recibe TRUE, desactiva la combinación                                  *)
  4. (******************************************************************************)
  5. procedure ControlTaskManager(Desactivar: Boolean);
  6. var
  7.   OldVal: Longint;
  8.   Reg: Tregistry;
  9. begin
  10.   if Desactiver then
  11.   // desactivar la combinación de teclas
  12.   begin
  13.     if DeterminarVersionWindows then
  14.     // Si la versión es Windows NT, 2000, XP
  15.     begin
  16.       reg := TRegistry.Create;
  17.       reg.RootKey := HKEY_CURRENT_USER;
  18.       // Test para saber si la llave del usuario en curso existe
  19.       if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', False) then
  20.         reg.WriteString('DisableTaskMgr', '1')
  21.       else
  22.       // si no existe, la creamos
  23.       begin
  24.         reg.RootKey := HKEY_CURRENT_USER;
  25.         reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', True);
  26.         reg.WriteString('DisableTaskMgr', '1');
  27.       end;
  28.       reg.CloseKey;
  29.     end
  30.     else
  31.       // Si la versión es Windows 95, 98, Me
  32.       SystemParametersInfo(SPI_SCREENSAVERRUNNING, word(True), @OldVal, 0);
  33.   end
  34.   else
  35.   // activar la combinación de teclas
  36.   begin
  37.     if DeterminarVersionWindows then
  38.     // Si la versión es Windows NT, 2000, XP
  39.     begin
  40.       reg := TRegistry.Create;
  41.       reg.RootKey := HKEY_CURRENT_USER;
  42.       // Test para saber si la llave del usuario en curso existe
  43.       if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', False) then
  44.         reg.DeleteValue('DisableTaskMgr')
  45.       else
  46.       // si no existe, la creamos
  47.       begin
  48.         reg.RootKey := HKEY_CURRENT_USER;
  49.         reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', True);
  50.         reg.DeleteValue('DisableTaskMgr');
  51.       end;
  52.       reg.CloseKey;
  53.     end
  54.     else
  55.       // Si la versión es Windows 95, 98, Me
  56.       SystemParametersInfo(SPI_SCREENSAVERRUNNING, word(False), @OldVal, 0);
  57.   end;
  58. end;