Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2004
jobev_lee jobev_lee is offline
Registrado
 
Registrado: jun 2004
Posts: 1
Poder: 0
jobev_lee Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 21-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 10-07-2004
NeWNeO NeWNeO is offline
Miembro
 
Registrado: ago 2003
Posts: 35
Poder: 0
NeWNeO Va por buen camino
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
Suerte

Última edición por roman fecha: 23-06-2005 a las 22:55:59. Razón: Cortar líneas demasiado largas
Responder Con Cita
  #4  
Antiguo 11-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 23-06-2005
kaiser_robert kaiser_robert is offline
Miembro
 
Registrado: jun 2005
Posts: 18
Poder: 0
kaiser_robert Va por buen camino
Thumbs down 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


___________________________________________________
Al que madruga le da sueño
Responder Con Cita
  #6  
Antiguo 23-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 13-09-2005
Avatar de DarkDrakon
DarkDrakon DarkDrakon is offline
Miembro
 
Registrado: abr 2005
Ubicación: Tacna - Peru
Posts: 46
Poder: 0
DarkDrakon Va por buen camino
Talking Algo ke te puede Servir

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);
Esto me Funciono para WinXP y 2000

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;
__________________
Dark Drakon::


"Ego sum Draco dormiens ... Aut insanit Draco, aut Versus facit..."

Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:51:48.


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
Copyright 1996-2007 Club Delphi