Desarrollo de un controlador de Windows Sync Center
En este tema se proporciona un examen paso a paso de los requisitos para compilar un archivo DLL que implementa un controlador que se usará con el Centro de sincronización. Esta información es válida a partir de Windows Vista.
La experiencia de sincronización de Windows antes de Vista
Windows XP proporcionó un Administrador de sincronización (mobsync.exe). Muchos dispositivos como reproductores mp3, teléfonos móviles y cámaras también proporcionaron sus propias interfaces de sincronización en lugar de usar el Administrador de sincronización. Esto dio lugar a una experiencia de usuario incoherente y no descentralizada.
La nueva característica centro de sincronización proporcionada en Windows Vista tiene varias ventajas sobre el Administrador de sincronización anterior.
- Mejor detectabilidad
- Menos necesidad de acción directa del usuario
- No bloquea otras operaciones
- Mejor visualización del progreso de la sincronización
- Más fácil de comprender el modelo de desarrollo
API del Centro de sincronización
El Centro de sincronización se comunica con los controladores a través de varias interfaces del modelo de objetos componentes (COM). No todas estas interfaces son necesarias para implementar un controlador del Centro de sincronización. Este tema se ha dividido en dos secciones. En la primera sección se explican las interfaces COM esenciales que todos los controladores deben admitir y la segunda sección examina las interfaces COM opcionales y examina las razones por las que un controlador las admitiría.
Interfaces esenciales
Todos los controladores del Centro de sincronización deben admitir las interfaces siguientes:
- ISyncMgrHandler
- ISyncMgrHandlerInfo
- ISyncMgrSyncItemContainer
- IEnumSyncMgrSyncItems
- ISyncMgrSyncItem
- ISyncMgrSyncItemInfo
ISyncMgrSyncItem e ISyncMgrSyncItemInfo se usan para describir un único elemento de sincronización implicado en la sincronización con el Centro de sincronización. Un elemento de sincronización suele representar un tipo de datos determinado (como imágenes) o una ubicación determinada de los datos.
Los elementos de sincronización que representan diferentes ubicaciones de datos permiten sincronizaciones muy específicas. La granularidad de la ubicación es hasta el autor del controlador, pero se debe tener cuidado en el diseño. Si hay demasiados elementos de sincronización (ubicaciones), el usuario está restringido en su capacidad de sincronizar solo determinados datos. En el otro extremo, demasiada granularidad puede ser inadministrable.
Si un controlador admite más de un tipo de datos o varias ubicaciones de datos, debe admitir más de un objeto de elemento de sincronización. Un ejemplo podría ser un asistente de datos personales (PDA) que permite al usuario sincronizar contactos, elementos de calendario y documentos. Estos tres tipos de datos deben representarse mediante tres objetos únicos que exponen las interfaces ISyncMgrSyncItem e ISyncMgrSyncItemInfo .
La interfaz IEnumSyncMgrSyncItems proporciona un mecanismo para enumerar los elementos de sincronización de un controlador. Para recuperar este enumerador, el Centro de sincronización llama al método ISyncMgrSyncItemContainer::GetSyncItemEnumerator expuesto por el controlador. ISyncMgrSyncItemContainer también contiene otros dos métodos que el Centro de sincronización puede usar para recuperar información sobre los elementos de sincronización del controlador:
- GetSyncItem devuelve un elemento de sincronización específico.
- GetSyncItemCount devuelve el número de elementos de sincronización admitidos por el controlador.
ISyncMgrHandler e ISyncMgrHandlerInfo se usan para describir las propiedades del hander e iniciar la sincronización real. ISyncMgrHandler::Synchronize es donde el código del controlador lleva a cabo la sincronización y proporciona comentarios sobre el progreso y los problemas que se producen.
Muchos de los métodos de interfaz no necesitan implementarse completamente. El Centro de sincronización proporciona una determinada cantidad de información predeterminada. Las interfaces permiten a un controlador invalidar esta información y proporcionar información personalizada para mostrarla, si es necesario.