Compartir a través de


Compatibilidad con WIA-TWAIN

Si un dispositivo puede tener dos o más controladores, pruebe estos controladores exhaustivamente por motivos de compatibilidad entre sí. Por ejemplo, si un controlador deja el dispositivo en un estado inutilizable (como el controlador que no envía el mensaje de cierre de sesión en algún protocolo), el otro controlador podría producir un error cuando intenta comunicarse con el dispositivo. Esta situación suele ocurrir con dispositivos serie.

WIA y TWAIN en el mismo archivo DLL

Si está ejecutando un controlador WIA y un controlador TWAIN al mismo tiempo desde un único archivo DLL, el servicio WIA y la aplicación TWAIN cargarán una instancia de este archivo DLL. La instancia wia del archivo DLL compilará el árbol de elementos wia. Este árbol representa las carpetas y las imágenes de la cámara. Cualquier aplicación que use WIA (como Mi ordenador o Escáner y Asistente para cámara) tendrá una copia del árbol de elementos en el controlador.

Cuando se elimina o agrega una imagen mediante el controlador TWAIN, el controlador WIA no recibe una notificación de este cambio. Como resultado, el árbol de elementos wia contendrá imágenes que se han eliminado o no contendrá imágenes que se hayan agregado. En cualquier caso, el controlador debe actualizar su árbol de elementos. Para ello, el controlador TWAIN debe pedir al controlador WIA que actualice su árbol de elementos cuando se haya agregado o eliminado una imagen.

Una manera de hacerlo es llamar a CoCreateInstance(CLSID_IWiaDevMgr,...) desde el controlador TWAIN, enumerar todos los dispositivos y buscar el dispositivo. Una manera de identificar el controlador a través de esta enumeración es crear una propiedad personalizada en el controlador WIA para que si el controlador TWAIN consulta esta propiedad y existe, sabrá que es el controlador WIA. Una vez que tenga el IWiaItem para el controlador, envíe un comando al controlador para recompilar su árbol (por ejemplo, envíe un comando WIA CMD_SYNCHRONIZE en una llamada al método IWiaItem::D eviceCommand ). CoCreateInstance, IWiaDevMgr e IWiaItem se describen en la documentación de Microsoft Windows SDK.

Otra manera de actualizar el árbol de elementos WIA es crear un evento con nombre en el controlador WIA. Un subproceso en el controlador WIA puede esperar a que se indique este evento. Cada vez que elimine o agregue una imagen mediante el controlador TWAIN, el controlador TWAIN señale (llamando a SetEvent (descrito en la documentación de Windows SDK)) en este evento con nombre. El subproceso del controlador WIA se liberará y el controlador WIA volverá a generar el árbol.

En cualquier caso, debe recompilar el árbol para que refleje los cambios realizados en las imágenes reales en la cámara o escáner. Asegúrese de que cada vez que actualice el árbol agregando o eliminando un elemento del árbol de elementos, se pone en cola un evento (por ejemplo, WIA_EVENT_ITEM_DELETED o WIA_EVENT_TREE_UPDATED (para obtener una descripción de estos y otros identificadores de eventos de WIA, consulte la documentación de Windows SDK)). Si envía correctamente un evento cuando cambie el árbol, solucionará el problema con Mi computadora y otras aplicaciones WIA que no se actualizan automáticamente.

Nota Aunque los controladores TWAIN y WIA pueden existir en el mismo archivo DLL, los controladores WIA y TWAIN no pueden compartir la misma interfaz de usuario. Cada controlador debe tener su propia interfaz de usuario.