Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 (por ejemplo, el controlador 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 ejecuta 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 de WIA del archivo DLL compilará el árbol de elementos WIA. Este árbol representa las carpetas e 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 su controlador WIA. Una vez que tenga el IWiaItem para el controlador, envíe un comando al controlador para reconstruir su árbol (por ejemplo, envíe un comando WIA CMD_SYNCHRONIZE en una llamada al método IWiaItem::DeviceCommand). 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 de su controlador WIA puede esperar a que este evento sea señalizado. Siempre que elimine o agregue una imagen mediante el controlador TWAIN, el controlador TWAIN indica (llamando a SetEvent (descrito en la documentación de Windows SDK) en este evento con nombre. El hilo en su controlador WIA se liberará y el controlador WIA reconstruirá el árbol.
En cualquier caso, debe reconstruir el árbol para que refleje los cambios realizados en las imágenes reales de la cámara o del escáner. Asegúrese de que cada vez que actualice el árbol agregando o eliminando un elemento del árbol de elementos, 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 WIA, consulte la documentación de Windows SDK)). Si envía correctamente un evento cuando su árbol cambie, esto solucionará el problema con Mi PC y otras aplicaciones WIA que no se actualizan automáticamente.
Nota Aunque los controladores TWAIN y WIA pueden existir en la misma DLL, los controladores WIA y TWAIN no pueden compartir la misma interfaz de usuario. Cada controlador debe tener su propia interfaz de usuario.