FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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) |
#2
|
||||
|
||||
Hace no mucho escribí código para bloquear estas teclas con código muy parecido al que pones pero sin necesidad del dll. Funciona para Windows2000 y, según alguien comentó, también en WindowsXP. Si te interesa puedes ver el código en el siguiente enlace
hooks.pas // Saludos Última edición por roman fecha: 04-08-2003 a las 06:46:47. |
#3
|
|||
|
|||
Que buen pedazo de código! Funciona simplemente bien.
Lo probé en XP Profesional y todo bien. Agradecido eternamente... (Lo de la necesidad de dll supongo que la documentación que viene con Delphi esta bastante desactualizada) |
#4
|
|||
|
|||
Cita:
necesito que alguien me ayude con el bloqueo del teclado para Win Xp, la direccion que da Roman ya no esta disponible y tengo que hacer esto para una aplicacion de ciber cafe. |
#5
|
||||
|
||||
#6
|
|||
|
|||
Cita:
Saludos y gracias anticipadas. |
#7
|
||||
|
||||
Hola,
Una vez incluída la unidad en tu proyecto, su utilización es bastante sencilla. Se trata de ejecutar el procedimiento "SetHook", a modo de preparación, y a continuación llamar al procedimiento "LockKey" tantas veces como te sea menester, esto es, como dice en la ayuda de la unidad "Hook.pas" el propio Román:
Para deshabilitar la combinación de teclas "ALT + ESC". Obviamente la llamada a dicho procedimiento ha de hacerse luego de hacer inicializado el "Hook", que ya he comentado que puede hacerse, sencillamente, llamando al procedimiento "SetHook" antes de llamar a "LockKey". Para habilitar de nuevo una combinación de teclas basta con que llames a "LockKey" indicando la combinación y, esta vez, pasando como segundo parámetro el valor "false":
No tendrás que llamar explícitamente al procedimiento "ReleaseHook", que vendría a ser el "contrario" a "SetHook", puesto que este se llama en la cláusula "finalization" de la propia unidad "Hook.pas".
Puedes usar, por ejemplo, el evento "OnCreate" de tu formulario principal para llamar al procedimiento "SetHook". A ver si el siguiente código te da alguna idea:
|
#8
|
|||
|
|||
Cita:
basicamente me interesaria bloquear el teclado y raton para mi aplicacion delphi de manera que quede protegida, pero que se pudiera hacer uso del teclado y raton en el pc en general; dicho de otra manera, que se pueda andar en el pc pero no en la aplicación delphi es posible? gracias de antemano |
#9
|
||||
|
||||
Bloquear el teclado y el ratón no es muy buena idea. ¿No será mejor que tu aplicación sea un servicio?
De cualquier forma, te muestro como realizar el bloqueo:
Saludos. Última edición por escafandra fecha: 17-08-2011 a las 11:42:02. |
#10
|
||||
|
||||
Cita:
Saludos!
__________________
Si no lo sabes, necesitas leerlo |
|
|
|