Condividi tramite


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.

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 di eventi dell'interfaccia del dispositivo per tutte le classi di interfaccia del dispositivo. Il membro dbcc_classguid viene ignorato.

Questo valore può essere utilizzato 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 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)

Vedi anche

BroadcastSystemMessage

DEV_BROADCAST_HDR

Funzioni Gestione dispositivi

Notifiche del dispositivo

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE