WinEvents e Accessibilità attiva
I server Di accessibilità microsoft attiva generano WinEvents per notificare ai client quando un oggetto accessibile cambia. Esistono numerose condizioni in cui un server notifica un client di una modifica. Ogni costante evento definita da Microsoft Active Accessibility descrive una condizione relativa alla notifica di un client. Ad esempio, WinEvents può segnalare:
- Quando un oggetto viene creato o eliminato.
- Quando un oggetto riceve o perde lo stato attivo.
- Quando lo stato o la posizione di un oggetto cambia.
- Quando viene modificata una proprietà di un oggetto.
Le applicazioni client non ricevono automaticamente notifiche eventi; devono specificare gli eventi che vogliono ricevere chiamando la funzione SetWinEventHook . Con SetWinEventHook, un client registra per ricevere uno o più eventi e imposta una funzione hook per gestire gli eventi specificati. I client possono usare la stessa funzione hook per gestire più tipi di eventi oppure possono usare funzioni di hook multipe. I client chiamano SetWinEventHook una volta per ogni funzione hook che deve registrare.
Le funzioni di hook si trovano nel corpo del codice del client, in una DLL mappata al processo del client o in una DLL mappata al processo del server. Ognuno di questi metodi presenta vantaggi e svantaggi. Per altre informazioni, vedere Funzioni hook in contesto e out-of-context.
Per notificare ai client di un evento, i server chiamano NotifyWinEvent. Il sistema verifica se le applicazioni client hanno impostato funzioni di hook per l'evento e chiamano le funzioni di hook appropriate in base alle esigenze.
Quando viene chiamata la funzione hook del client, riceve un numero di parametri che descrivono l'evento e l'oggetto che ha generato l'evento. Per ottenere l'accesso all'oggetto che ha generato l'evento, la funzione di hook client chiama AccessibleObjectFromEvent.
Nota
Se non sono stati registrati client per ricevere WinEvents, l'impatto sulle prestazioni su un server per chiamare NotifyWinEvent è trascurabile.
I server chiamano NotifyWinEvent per le modifiche solo nei propri oggetti accessibili; non chiamano NotifyWinEvent per le modifiche apportate agli elementi dell'interfaccia utente forniti dal sistema.
Event-Driven comunicazione
I client devono registrare un hook WinEvent prima di poter ricevere notifiche WinEvent. Per evitare callback non necessari e migliorare le prestazioni, i client devono registrarsi solo per gli eventi che devono ricevere.
All'interno della routine hook, il client può chiamare AccessibleObjectFromEvent per recuperare un oggetto IAccessibile per l'elemento a cui si applica l'evento. Con questo oggetto, il client può iniziare a chiamare metodi IAccessi per recuperare informazioni o interagire con l'elemento dell'interfaccia utente.