elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Interrupciones de ratón bajo DOS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Interrupciones de ratón bajo DOS  (Leído 2,733 veces)
@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Interrupciones de ratón bajo DOS
« en: 26 Junio 2010, 20:17 pm »

Os lo dejo aquí, extraído directamente de mi nuevo blog, y anteriormente de mi cuaderno de apuntes.



Este ejemplo se desarrolla con Borland C++ 3.1 (Bajo Windows XP) Podemos manejar las interrupciones del ratón gracias a la interrupción 33h.

Tenemos un programa en modo gráfico bajo C (Utilizando graphics.c) y deseamos programar un botón, que al ser pulsado con el botón izquierdo de nuestro ratón, el programa ejecute una acción.

Tras programar la parte visual, y tras tener dibujado nuestro botón llegamos a programar la interrupción.

Lo primero que debemos hacer es pasar la función al registro AX. Una vez hecho, interrumpimos y 'preguntamos' por los valores registrados en BX, CX,...

Si hacemos esto dentro de una función, nos podrá devolver si se ha hecho click o no.

Antes de empezar a usar el ratón tenemos que inicializarlo. Podemos escribir un procedimiento similar a este:

 
Código
  1.   void iniciarRaton()
  2.    {
  3.    union REGS registro_e, registro_s;
  4.    registro_e.x.ax =0; //Función 00h
  5.    int86 (0x33, &registro_e, &registro_s);
  6.    }
  7.  


Cuando llamemos a este procedimiento, reiniciaremos el ratón. Para mas inri, podemos transformar el procedimiento en función, haciendo que devuelva 0 o 1 dependiendo de si se ha podido reiniciar el ratón o no.

También indicar que en vez de declarar union REGS dentro de cada procedimiento o función, es mas cómodo declararlo fuera de todas las funciones, haciendo que sea común a todas.

Función para los botones del ratón:

Código
  1.    int movRat()
  2.    { //Suponemos que union REGS es común
  3.    registro_e.x.ax =3;
  4.    int86 (0x33, &registro_e, &registro_s);
  5.    if (registro_s.x.bx ==1) return 1;
  6.    if (registro_s.x.bx ==2) return 2;
  7.    }
  8.  


Esta función nos devuelve 1 si se pulsa el botón izquierdo del ratón en cualquier posición de la pantalla, y 2 para el botón derecho.

Si queremos delimitar la zona de actuación de la interrupción, la tenemos que pasar las coordenadas del botón a CX y DX (X y R, respectivamente)

Con esto, solo nos quedaría hacer una comprobación a la función movRat, para comprobar si se ha producido una interrupción.
Código
  1.    if (movRat()==1) fprintf(stdout, "Botón Izquierdo\n");


En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Interrupciones de ratón bajo DOS
« Respuesta #1 en: 26 Junio 2010, 22:29 pm »

Muy bueno tio, gracias por el aporte, como siempre, fantastico

 ;)

Saludos


En línea

@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: Interrupciones de ratón bajo DOS
« Respuesta #2 en: 26 Junio 2010, 22:44 pm »

Muy bueno tio, gracias por el aporte, como siempre, fantastico

 ;)

Saludos

Lo malo es que esto es de clase y es bajo DOS, me gustaría hacerlo bajo GNU/Linux.. xD

Gracias por tu opinión.
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Interrupciones de ratón bajo DOS
« Respuesta #3 en: 26 Junio 2010, 23:08 pm »

Muy bueno tio, gracias por el aporte, como siempre, fantastico

 ;)

Saludos

Lo malo es que esto es de clase y es bajo DOS, me gustaría hacerlo bajo GNU/Linux.. xD

Gracias por tu opinión.
Pues busca las interrupciones para Unix jeje, estas cosas me gusta hacerlas en ASM, mas que nad aporque pudiendolo hacer mas facil en C xD no hay que complicarse la vida, pero es una manera de profundizarlo.

Saludos
En línea

@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: Interrupciones de ratón bajo DOS
« Respuesta #4 en: 26 Junio 2010, 23:10 pm »

Yo no he llegado a ASM, pero ya estoy empezando a copiarme la teoría y eso.. Ayer me quedé en Opcodes.  :-\
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines