Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   programa residente en memoria (https://www.clubdelphi.com/foros/showthread.php?t=55809)

elcigarra 27-04-2008 22:41:01

programa residente en memoria
 
Estimados.

Estoy haciendo una aplicación de base de datos locales en Delphi 7. El usuario realiza otras operaciones en el pc y en determinado momento ingresa en una base de datos uno o dos datos.

Lo que megustaría hacer (aunque no sé si es posible) es un software que quede residente en memoria y cada vez que el usuario va a ingresar esos datos (teniendo aún el software de un tercero abierto) apreta algo así como unas hot keys de tipo "Ctrl F4", por decir algo, lo que provoca que se abre una ventanita con el formulario deonde ingresar los datos.

El problema que me encuentro es como hacer para que un pequeño programa (que se puede cargar al iniciar el PC), quede en memoria y se active con alguna combinación de teclas definida.

elcigarra 27-04-2008 23:01:47

digamos que para hacerlo más fácil, no tendría problema en dejar residente un programa con un ícono en el sector tray. El tema sería cómo abrir el programa con una combinación de teclas, o dicho de otra forma, como programarlo para que responda en determinada forma cuando esas teclas se pulsen en cualquier momento.

Recuerdo hace unos 25 años existía un programita en pascal que dejaba residente un sonido para cada tecla y cuando el usuario escribia en cualquier programa las teclas hacían ruido. Creo que en aquel momento hacían uso de un método "keep", si mal no recuerdo. El código de un ejemplo como ese que funcione en Delphi me serviría como punto de partida.

AzidRain 28-04-2008 05:12:24

Estamos hablando de la prehistoria de la programación actual. Los famosos TSR (Terminate and Stay Resident) de los tiempos de DOS. Este tipo de programas se hicieron famosos precisamente por una creación de Borland, el famosos SideKick. Recordemos que en tiempos de DOS no existia (y creo que aún en Windoz) eso de multitasking, el SO se empeñaba en ser monotareas y no podía ejecutarse más de un programa a la vez.

En este tipo de programas se partía del siguiente pseudocódigo:

Código:

1.- Preparar lo que se iba a hacer
2.- Definir un procedimiento que queramos ejecutar cuando se pulse una tecla o pase alguna otra cosa (un enfoque primitivo de los eventos)
3.- Interceptar la interrupción del DOS o BIOS para ejecutar lo que definimos en el paso DOS (normalmente era una tecla mediante algun Int13 o Int24 según el caso)
4.- Terminar nuestro programa y usar Keep para que quedara latente en memoria.

Aquí la clave eran las interrupciones tanto de BIOS como DOS que eran las únicas formas de entrometerse entre un programa y el sistema operativo o incluso el hardware. Cabe mencionar que en aquellos tiempos esto solo se podía hacer en C o en Pascal gracias al soporte de ensamblador de este último.

Con la llegada de Windows aparecieron los famosos Hooks y la API del mismo que no es otra cosa que una versión con esteroides de las antiguas interrupciones.

Lo que pretendes hacer requiere que te metas directamente con la API de windows, programar un hook del teclado para que tu programa sea el primero en procesar cualquier evento de teclado antes que la aplicación del "tercero" y luego actuar en consecuencia. Aunque personalmente lo veo redundante porque al flojo del usuario le basta con hacer un click en la barra de tareas para cambiarse a tu aplicación, lo cual me parece que es menos esfuerzo que presionar dos teclas a la vez.

Neftali [Germán.Estévez] 28-04-2008 10:05:25

Cita:

Empezado por elcigarra (Mensaje 282881)
...El tema sería cómo abrir el programa con una combinación de teclas, o dicho de otra forma, como programarlo para que responda en determinada forma cuando esas teclas se pulsen en cualquier momento.

Para eso basta con registrar la tecla a nivel de todo el sistema.
Revisa la ayuda de la API RegisterHotKey. Seguro que si buscas aquí en el foro sobre esta API también encuentras ejemplos, ya que hemos hablasdo más veces de ella.

Neftali [Germán.Estévez] 28-04-2008 10:06:50

Por ejemplo, este o este, aunque hay más...

elcigarra 28-04-2008 18:39:48

Gracias, eso buscaba


La franja horaria es GMT +2. Ahora son las 22:53:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi