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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-08-2003
syul syul is offline
Registrado
 
Registrado: ago 2003
Ubicación: Asunción - Paraguay
Posts: 5
Poder: 0
syul Va por buen camino
Bloquear Teclas en XP

Desarrollando una aplicación Delphi para un cyber café,
me encontré con la necesidad de bloquear el acceso
a las computadoras, cosa que ya he logrado en maquinas con Win98 y WinMe
con el truco del screen saver:

SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @dummy, 0);

En XP el tema se complica un poco más y lo mejor que encontré hasta ahora
es esta página:

http://guille.costasol.net/API/deshabilitarAltTab.asp

pero esta en Visual Basic! : (


El codigo de abajo es una traducción a Delphi que estoy intentando.
Me base un poco (o bastante) en el truco 408 de trucomania (http://www.q3.nu/trucomania/truco.cgi?408&esp).

La idea es que a traves del .dll que genera este codigo se instala un hook en Windows
que detecta pulsaciones del teclado y permite bloquerlas.

Este código funciona bien, menos el par de condiciones if que sigue al comentario
"// Si se pulsa Ctrl+Esc", condiciones que todavia no fueron traducidas.

Digo funciona bien porque basta con comentariar estos "ifs" y ver como todas las teclas y
combinaciones ,menos CTRL+ALT+DEL, son bloqueadas.

library Hook;

uses Windows, Messages;

type
tagKBDLLHOOKSTRUCT = record
vkCode: DWORD; // virtual key code
scanCode: DWORD; // scan code
flags: DWORD; // flags
time: DWORD; // time stamp for this message
dwExtraInfo: DWORD; // extra info from the driver or keybd_event
end;

const
WH_KEYBOARD_LL = 13;

var
mHook : HHook;

function LLKeyBoardProc(code : Integer;
wParam : WPARAM;
lParam : LPARAM
) : LRESULT; stdcall;
var
pkbhs : tagKBDLLHOOKSTRUCT;
ret : Longint;
begin
ret := 0;

// Copiamos el parámetro en la estructura
CopyMemory(@pkbhs, @lParam, SizeOf(pkbhs));

if code = HC_ACTION then begin
// Si se pulsa Ctrl+Esc
if pkbhs.vkCode = VK_ESCAPE then begin
if GetAsyncKeyState(VK_CONTROL) And &H8000 then begin
ret := 1;
end;
end;
end;

if ret = 0 Then begin
ret := CallNextHookEx(mHook, code, wParam, lParam);
end;

Result := ret;
end;

procedure HookOn; stdcall;
begin
mHook := SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyBoardProc, HInstance , 0);
end;

procedure HookOff; stdcall;
begin
UnhookWindowsHookEx(mHook);
end;

exports HookOn, HookOff;

begin
end.



Para utilizar el .dll creado falta un .dpr mas con un formulario que en
su OnCreate cargue el .dll, cargue HookOn y HookOff y ejecute HookOn y en
su OnDestroy ejecute HookOff y descargue el .dll. (Ver http://www.q3.nu/trucomania/truco.cgi?408&esp)
Responder Con Cita
 



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 11:44:21.


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