FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿Cómo detecto CTRL+C en consola?
Hola,
pues eso. Estoy haciendo un programa en modo consola y necesito que cuando el usuario pulse CTRL+C o CTRL+Break, en lugar de salir del programa, llame a una función. Conozco la forma tradicional escaneando el teclado con la INT16h, pero me gustaría saber si hay alguna forma más de alto nivel para hacerlo (capturando algún mensaje o algo así). Gracias y un saludo. Última edición por Mastropiero fecha: 08-11-2005 a las 11:26:29. |
#2
|
||||
|
||||
MMMMMMMMmmmmmmhhhhhhh......bueno............!!! yo recuerdo q cuando usaba Turbo C o Turbo C++ habia una función llamada CtrlBrk si mas no recuerdo, y modificaba el vector de interrupciones para esa interrupcion valga la redundancia capturandola y ejecutando la función señalada y definida por nosotros, pero creo q para Win32 ya no exista, la otra q veo es q mantengas el uso de interrupciones. Tal vez no te pude ayudar pero al menos tienes un indicio de por donde buscar.
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad." Simón Bolívar (Carta al Coronel Inglés Patricio Cambell 05/08/1829). |
#3
|
|||
|
|||
¡Gracias!
Parece que es algo del DOS puro, pero miraré a ver si existe algo equivalente. Realmente desconocía esa función ya que en aquella época yo llamaba a la INT a "caraperro". Investigaré por esa línea. Gracias y un saludo. |
#4
|
|||
|
|||
Buenas, han pasado dos años y me olvidé de este hilo, pero como creo que puede ser útil para alguien, posteo la solución que encontré en su momento:
Cualquier aplicación (sea consola o gui) que use la unidad SysUtils, levanta una excepción llamada EControlC cuando CTRL+C es pulsado. Así que lo único que hay que hacer es capturar excepciones en la parte del programa que queremos detectar la interrupción por CTRL+C, y manejar la excepción EControlC a nuestro antojo. Saludos! |
#5
|
||||
|
||||
Wenas.
Sólo decir que he estado haciendo pruebas en Linux (Free Pascal) y no funciona. Compila y ejecuta, pero al pulsar [Ctrl+C] cierra el programa y ya está. El programa que he utilizado es este: Sólo lo digo para que conste, no porque crea que esté mal que no es el caso. |
#6
|
|||
|
|||
Cita:
Lo digo por si en las opciones del debugger o de projecto hay alguna opción que esté inhibiendo el manejo de excepciones del OS. Yo en su momento lo hice funcionar (Delphi 7 sobre Windows 98), aunque no lo he vuelto a probar desde entonces en XP. Saludos. |
#7
|
||||
|
||||
Cita:
Por cierto, que lo he consultado en la lista de correos de Free Pascal y me han dicho que en Linux no funciona. Para ello hay que utilizar un "signal handler" . No lo tengo claro porque el mensaje ha llegado corrupto y no lo he podido leer bien. |
#8
|
||||
|
||||
Debes revisar la API SetConsoleCtrlHandler
|
#9
|
||||
|
||||
Gracias [ChackAll]
|
|
|
|