Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Bloquear Teclado (https://www.clubdelphi.com/foros/showthread.php?t=11658)

jobev_lee 21-06-2004 21:18:07

Bloquear Teclado
 
:) Hola, que tal... Espero que todo bien... aqui yo nuevito nuevito en este foro...

Bueno al grano entonces, resulta que tengo que desarrollar un proyecto de administracion de maquinas y decearia que alguien me facilitara algun codio fuente que me ayude a bloquear el teclado hasta que una aplicacion en el servidor lo habilite... he intentado usar ASM pero en XP no me chunca...

HELP

roman 21-06-2004 21:23:08

Pienso que podrías usar un hook del teclado a nivel de sistema para bloquear toda actividad en el teclado. A reserva de que consultes la documentación (busca Hooks en la ayuda del SDK de Windows) puedes ver un ejemplo en la unidad hooks.pas de mi página que muestra cómo instalar y desintalar un hook, cosa que harías según el mensaje que mande el servidor.

// Saludos

NeWNeO 10-07-2004 15:08:04

Prueba...
 
Yo te puedo ayudar, pero lo que te voy a decir anula tanto el teclado como el raton.

Usaremos una función que viene en el user32.dll denominada "BlockInput", y que corta toda comunicación con los periféricos del usuario (teclado y ratón)

Código Delphi [-]
private
 function FunctionExists(LaFunction: string;DllFile:string; var p: pointer):  boolean;
// Con esta función comprobaremos la disponibilidad de la función
public
 procedure SetInput(Stat: boolean); // Aquí modificaremos el estado


function TForm1.FunctionExists(LaFunction: string;DllFile:string; var p: pointer): boolean;
var
lib: THandle;
begin
 Result := false;
 p := NIL;
 if LoadLibrary(PChar(DllFile)) = 0 then exit; // Cargamos la libreria
 lib := GetModuleHandle(PChar(DllFile)); // Obtenemos el handle de la libreria
 if lib <> 0 then // Si existe el handle
 begin
  // Obtenemos la dirección de la función que necesitamos
  p := GetProcAddress(lib, PChar(LaFunction));
  if p <> NIL then Result := true;
 end;
end;

procedure TForm1.SetInput(Stat: Boolean);
var
 xBlockInput : function(Block: BOOL): BOOL; stdcall;
begin
// Nos aseguramos que la función está disponible, la cargamos, y ejecutamos
 if FunctionExists('BlockInput','USER32.DLL', @xBlockInput) then xBlockInput(Stat) 
else showmessage('No se pudo cargar la función especificada'); 
end;

Puedes hacer pruebas poniendo un timer a 5, 10 seg... para que te desbloquee el teclado, ¡o si nos deberás reiniciar el PC!

"FunctionExists" te sirve para cargar y ejecutar cualquier proceso o función que necesites :D
Suerte

roman 11-07-2004 00:49:31

Cita:

Empezado por NeWNeO
Puedes hacer pruebas poniendo un timer a 5, 10 seg... para que te desbloquee el teclado, ¡o si nos deberás reiniciar el PC!

De hecho no será necesario reiniciar la PC. El problema con esta función es que realmente no sirve. Sí bloquea el teclado y el ratón excepto por CTRL-ALT-DEL y apenas se oprime esta combinación se restaura la actividad de teclado y ratón; al menos en la prueba que realicé en Windows XP y de acuerdo a la documentación.

// Saludos

kaiser_robert 23-06-2005 22:40:28

desabilaitar tambien ctrl+alt+supr
 
bueno di uso a estos codigos pero ahora quiero que el ctrl+alt+supr tampoco lo detecten como hago gracias por sus respuestas

:rolleyes:
___________________________________________________
Al que madruga le da sueño

roman 23-06-2005 22:53:48

En WinXP/2000 esto es mucho más difícil. Cuando arrancas Windows, lo primero en ejecutarse es WinLogon.exe quien a su vez carga una biblioteca llamada gina.dll. Esta biblioteca se encarga de todo el proceso de autenticación del usuario y "se apropia" de la combinación ctrl-alt-supr de manera que no hay tiempo de interceptarla uno mismo. Entonces, al parecer, la única manera de poder lidiar con ello es escribiendo una dll que reemplace a gina. Esto puede hacerse y está documentado en el SDK de Windows pero no es tarea fácil ya que tienes que implementar muchas funciones y tener cuidado con no bloquear el proceso normal de carga del sistema.

Ahora una pregunta por curiosidad: ¿por qué pones el icono del pulgar hacia abajo? ¿Hay algo que desapruebas?

// Saludos

DarkDrakon 13-09-2005 01:53:16

Algo ke te puede Servir
 
:D :D Bueno a mi me Funciono esto en Win98:

Código:

var
  dummy : integer;

{Desactivar el  Ctrl-Alt-Del:}
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @dummy, 0);

Como Volver a Activarlo:

Código:


var
  dummy : integer;

{Volver a Activarlo}
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, @dummy, 0);

:D Esto me Funciono para WinXP y 2000 :D

Añade Registry en el uses de tu form

Código:

 
 procedure TForm1.Button1Click(Sender: TObject);

  procedure DisableTaskMgr(bTF: Boolean);
  var
        reg: TRegistry;
  begin
        reg := TRegistry.Create;
        reg.RootKey := HKEY_CURRENT_USER;

        reg.OpenKey('Software', True);
        reg.OpenKey('Microsoft', True);
        reg.OpenKey('Windows', True);
        reg.OpenKey('CurrentVersion', True);
        reg.OpenKey('Policies', True);
        reg.OpenKey('System', True);

        if bTF = Truethen
        begin
          reg.WriteString('DisableTaskMgr', '1');
        end
        else if bTF = False then
        begin
          reg.DeleteValue('DisableTaskMgr');
        end;
        reg.CloseKey;
  end;

 begin
  //Desabilitamos el Ctrl-Alt-Del
  //Disable Ctrl-Alt-Del
  DisableTaskMgr (True);
 end;



La franja horaria es GMT +2. Ahora son las 01:23:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi