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. Gracias de Antemano |
#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. |
|
|
|