![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Bloquear Combinaciones de Teclas.
Hola a todos, agradeceria a todo aquel que me pueda ayudar con mi problema.
Estoy haciendo una aplicacion en la que necesito bloquear algunas combinaciones de teclas, entre las que estan: -----[ALT]+[TAB] (o si fuere el caso indicarle a delphi que sea el unico que puede estar al frente) -----[CTRL]+[ALT]+[DELETE] Segun leia (espero me corrijan si me equivoco pero soy nuevo en delphi) se pueden capturar los eventos de windows con delphi, pero como lo hago?? ![]() Pienso que si puedo capturar los eventos, podre bloquear los eventos que resultan de la combinacion de teclas anteriormente descritas. Les agradeceria que me ayudaran con mi problema Nota:Con respecto a la guia de estilo, de publicar mas de una pregunta en el mismo tema, no creo que la este violando, pues lo que pregunto es sobre un mismo tema. ![]() ![]() |
#2
|
||||
|
||||
La combinación Ctrl+Alt+Del en Win2000/XP está muy protegida y hasta donde sé la única manera de bloquearla es rescribiendo una biblioteca dll de Windows llamada msgina.dll lo cual no es una tarea sencilla.
En cuanto a otras combinaciones como la de Alt+Tab, pásate por mi página y bájate la unidad hooks.pas // Saludos |
#3
|
||||
|
||||
Yo tengo unas rutinas que te pueden servir, yo las gasto para evitar que me cierren la aplicacion o cambien de tarea, asi pues deshabilito el administrador de tareas y las combinaciones [ESC+CTRL] [ALT+TAB] [CTRL+ALT+SUP]
Despues de consular en foros y paginas de trucos ... "he construido" esto: Bloquear_Teclas_windows(valor:boolean); y el codigo es: procedure Bloquear_Teclas_windows(valor:boolean); var dummy:integer; begin if valor then SetHook; LockKey(lkAltTab,valor); LockKey(lkAltEsc,valor); LockKey(lkCtrlEsc,valor); LockKey(lkAltF4,valor); LockKey(lkWin,valor); LockKey(lkApps,valor); if Not valor then ReleaseHook; teclasWinBloq:=Valor; if Valor then SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @dummy, 0) else SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, @dummy, 0); DisableTaskMgr(valor); if Not valor then LockWorkStation; end; 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 = True then begin reg.WriteString('DisableTaskMgr', '1'); end else if bTF = False then begin reg.DeleteValue('DisableTaskMgr'); end; reg.CloseKey; end; function LockWS: Boolean; // by Thomas Stutz, SDC type TLockWorkStation = function: Boolean; var hUser32: HMODULE; LockWorkStation: TLockWorkStation; begin // Here we import the function from USER32.DLL bloq_estacion:=False; hUser32 := GetModuleHandle('USER32.DLL'); if hUser32 <> 0 then begin @LockWorkStation := GetProcAddress(hUser32, 'LockWorkStation'); if @LockWorkStation <> nil then begin LockWorkStation; Result := True; bloq_estacion:=True; end; end; end; Espero que te sirva. |
#4
|
||||
|
||||
Muchas Gracias
En serio les agradezco a ambos, Luego les cuento como me salio todo.
Hasta Luego. |
#5
|
||||
|
||||
¿Y bien? ¿Como fue todo?
![]() |
#6
|
|||
|
|||
Cita:
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#7
|
||||
|
||||
![]() Bueno, encontré este hilo por casualidad y me dio curiosidad por saber qué había pasado. |
![]() |
|
|
![]() |
|