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) |
|
|
|