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??:confused: 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:) |
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 |
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. |
Muchas Gracias
En serio les agradezco a ambos, Luego les cuento como me salio todo.
Hasta Luego. |
¿Y bien? ¿Como fue todo?
:rolleyes: |
Cita:
|
:D
Bueno, encontré este hilo por casualidad y me dio curiosidad por saber qué había pasado. |
La franja horaria es GMT +2. Ahora son las 08:43:23. |
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