Funzione RegisterDeviceNotificationW (winuser.h)
Registra il dispositivo o il tipo di dispositivo per cui una finestra riceverà notifiche.
Nota
È possibile usare CM_Register_Notification anziché RegisterDeviceNotification se il codice è destinato Windows 8 o versioni più recenti di Windows. Il vantaggio di CM_Register_Notification è che non richiede un handle di finestra per funzionare.
Sintassi
HDEVNOTIFY RegisterDeviceNotificationW(
[in] HANDLE hRecipient,
[in] LPVOID NotificationFilter,
[in] DWORD Flags
);
Parametri
[in] hRecipient
Handle per la finestra o il servizio che riceverà gli eventi del dispositivo per i dispositivi specificati nel parametro NotificationFilter . Lo stesso handle di finestra può essere usato in più chiamate a RegisterDeviceNotification.
I servizi possono specificare un handle di finestra o un handle di stato del servizio.
[in] NotificationFilter
Puntatore a un blocco di dati che specifica il tipo di dispositivo per cui inviare le notifiche. Questo blocco inizia sempre con la struttura DEV_BROADCAST_HDR . I dati che seguono questa intestazione dipendono dal valore del membro dbch_devicetype , che può essere DBT_DEVTYP_DEVICEINTERFACE o DBT_DEVTYP_HANDLE. Per altre informazioni, vedere la sezione Osservazioni.
[in] Flags
Questo parametro può avere uno dei valori seguenti.
Inoltre, è possibile specificare il valore seguente.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è un handle di notifica del dispositivo.
Se la funzione ha esito negativo, il valore restituito è NULL. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Commenti
Le applicazioni inviano notifiche degli eventi usando la funzione BroadcastSystemMessage . Qualsiasi applicazione con una finestra di primo livello può ricevere notifiche di base elaborando il messaggio di WM_DEVICECHANGE . Le applicazioni possono usare la funzione RegisterDeviceNotification per la registrazione per ricevere le notifiche del dispositivo.
I servizi possono usare la funzione RegisterDeviceNotification per registrarsi per ricevere le notifiche del dispositivo. Se un servizio specifica un handle di finestra nel parametro hRecipient , le notifiche vengono inviate alla routine della finestra. Se hRecipient è un handle di stato del servizio, SERVICE_CONTROL_DEVICEEVENT notifiche vengono inviate al gestore del controllo del servizio. Per altre informazioni sul gestore del controllo del servizio, vedere HandlerEx.
Assicurarsi di gestire Plug and Play eventi del dispositivo il più rapidamente possibile. In caso contrario, il sistema potrebbe non rispondere. Se il gestore eventi deve eseguire un'operazione che potrebbe bloccare l'esecuzione (ad esempio I/O), è consigliabile avviare un altro thread per eseguire l'operazione in modo asincrono.
Gli handle di notifica del dispositivo restituiti da RegisterDeviceNotification devono essere chiusi chiamando la funzione UnregisterDeviceNotification quando non sono più necessari.
Gli eventi DBT_DEVICEARRIVAL e DBT_DEVICEREMOVECOMPLETE vengono trasmessi automaticamente a tutte le finestre di primo livello per i dispositivi porta. Pertanto, non è necessario chiamare RegisterDeviceNotification per le porte e la funzione ha esito negativo se il membro dbch_devicetype è DBT_DEVTYP_PORT. Le notifiche del volume vengono trasmesse anche alle finestre di primo livello, quindi la funzione ha esito negativo se dbch_devicetype è DBT_DEVTYP_VOLUME. I dispositivi definiti dall'OEM non vengono usati direttamente dal sistema, quindi la funzione ha esito negativo se dbch_devicetype è DBT_DEVTYP_OEM.
Esempio
Per un esempio, vedere Registrazione per la notifica del dispositivo.
Nota
L'intestazione winuser.h definisce RegisterDeviceNotification come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.
Requisiti
Client minimo supportato | Windows XP |
Server minimo supportato | Windows Server 2003 |
Piattaforma di destinazione | Windows |
Intestazione | winuser.h (include Windows.h) |
Libreria | User32.lib |
DLL | User32.dll |
Set di API | ext-ms-win-ntuser-misc-l1-1-0 (introdotto in Windows 8) |