Funzione RegisterDeviceNotificationA (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 successive di Windows. Il vantaggio di CM_Register_Notification è che non richiede un handle di finestra per funzionare.

Sintassi

HDEVNOTIFY RegisterDeviceNotificationA(
  [in] HANDLE hRecipient,
  [in] LPVOID NotificationFilter,
  [in] DWORD  Flags
);

Parametri

[in] hRecipient

Handle alla finestra o al servizio che riceverà gli eventi del dispositivo per i dispositivi specificati nel parametro NotificationFilter . Lo stesso handle della finestra può essere usato in più chiamate a RegisterDeviceNotification.

I servizi possono specificare un handle di gestione dello stato della finestra o 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 seguenti di 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.

Valore Significato
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
Il parametro hRecipient è un handle di finestra.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
Il parametro hRecipient è un handle di stato del servizio.
 

È inoltre possibile specificare il valore seguente.

Valore Significato
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
Notifica al destinatario degli eventi dell'interfaccia del dispositivo per tutte le classi di interfaccia del dispositivo. Il membro dbcc_classguid viene ignorato.

Questo valore può essere usato solo se il membro dbch_devicetype è DBT_DEVTYP_DEVICEINTERFACE.

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 di evento 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 registrare per ricevere notifiche del dispositivo.

I servizi possono usare la funzione RegisterDeviceNotification per registrare per ricevere notifiche del dispositivo. Se un servizio specifica un handle di finestra nel parametro hRecipient , le notifiche vengono inviate alla procedura della finestra. Se hRecipient è un handle di stato del servizio, SERVICE_CONTROL_DEVICEEVENT le 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 consiste nell'eseguire un'operazione che può 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 a 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 di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

Requisito Valore
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)

Vedi anche

BroadcastSystemMessage

DEV_BROADCAST_HDR

Funzioni Gestione dispositivi

Notifiche del dispositivo

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE