Capturar todos los mensajes windows
Publicado: Vie Feb 22, 2008 9:10 am
Hola, muy buenas...
Espero que alguien pueda ayudarme.
He mirado muchos mensajes en los foros y hay bastante código
de ejemplo de cómo capturar algunos mensajes de windows que
le llegan a nuestro programa: WM_KEYDOWN y cosas así... En
principio todo va bien, puedes sobreescribir algunos métodos de las clases
TEdit o lo que quieras y capturas esos eventos.
Incluso también he visto ejemplos de cómo cargar dinámicamente una DLL
y coger la dirección de la función que
nos interese en "inline C", y también me funciona de maravilla.
Mi problema es el siguiente: quiero acceder a un scanner. Para
ello he estado leyendo bastante documentación en TWAIN.ORG, y
es bastante completa. Ya he conseguido que mi aplicación Xailer
cargue el "twain_32.dll", busque la única función que hace de interfaz y
la llame para inicializar. Hasta aquí todo correcto:
pregunto por el DSM (Data Source Manager), lo abro, selecciono
el origen de datos (DS) que puede ser un escáner, una webcam
o lo que sea.
El gran problema es que a partir de ahora (y siguiendo las
indicaciones del manual del estándar TWAIN) nuestro bucle de WinProc hay
que reconfigurarlo y cada vez que hace un GetMessage y coge los mensajes
de windows hay que redirigirlos TODOS al Origen de datos, y preguntarle si
está listo, si no es así, podemos procesar ese mensaje como nuestro. Es el
Origen de datos el que toma el control y avisa a nuestro programa de que
está listo para enviar datos. Pero, ¿como hacer esto en Xailer? Que yo sepa
no tenemos acceso al procedimiento WindProc... esto lo generará Xailer/xHarbour
o yo qué sé... estoy un poco perdido la verdad.
Supongo que si no es posible o es muy complejo de hacer, tendré que hacerme
un interfaz en C++ y llamarlo desde mi programa Xailer. Pero es mucho más
tedioso y tendré que inventarme un "protocolo" para comunicarme entre los
programas. Sería mucho más sencillo y práctico tenerlo todo desde Xailer.
Muchas gracias de antemano,
Javier Jiménez
Espero que alguien pueda ayudarme.
He mirado muchos mensajes en los foros y hay bastante código
de ejemplo de cómo capturar algunos mensajes de windows que
le llegan a nuestro programa: WM_KEYDOWN y cosas así... En
principio todo va bien, puedes sobreescribir algunos métodos de las clases
TEdit o lo que quieras y capturas esos eventos.
Incluso también he visto ejemplos de cómo cargar dinámicamente una DLL
y coger la dirección de la función que
nos interese en "inline C", y también me funciona de maravilla.
Mi problema es el siguiente: quiero acceder a un scanner. Para
ello he estado leyendo bastante documentación en TWAIN.ORG, y
es bastante completa. Ya he conseguido que mi aplicación Xailer
cargue el "twain_32.dll", busque la única función que hace de interfaz y
la llame para inicializar. Hasta aquí todo correcto:
pregunto por el DSM (Data Source Manager), lo abro, selecciono
el origen de datos (DS) que puede ser un escáner, una webcam
o lo que sea.
El gran problema es que a partir de ahora (y siguiendo las
indicaciones del manual del estándar TWAIN) nuestro bucle de WinProc hay
que reconfigurarlo y cada vez que hace un GetMessage y coge los mensajes
de windows hay que redirigirlos TODOS al Origen de datos, y preguntarle si
está listo, si no es así, podemos procesar ese mensaje como nuestro. Es el
Origen de datos el que toma el control y avisa a nuestro programa de que
está listo para enviar datos. Pero, ¿como hacer esto en Xailer? Que yo sepa
no tenemos acceso al procedimiento WindProc... esto lo generará Xailer/xHarbour
o yo qué sé... estoy un poco perdido la verdad.
Supongo que si no es posible o es muy complejo de hacer, tendré que hacerme
un interfaz en C++ y llamarlo desde mi programa Xailer. Pero es mucho más
tedioso y tendré que inventarme un "protocolo" para comunicarme entre los
programas. Sería mucho más sencillo y práctico tenerlo todo desde Xailer.
Muchas gracias de antemano,
Javier Jiménez