Funzione FindFirstPrinterChangeNotification

La funzione FindFirstPrinterChangeNotification crea un oggetto di notifica di modifica e restituisce un handle all'oggetto. È quindi possibile usare questo handle in una chiamata a una delle funzioni di attesa per monitorare le modifiche apportate alla stampante o al server di stampa.

La chiamata FindFirstPrinterChangeNotification specifica il tipo di modifiche da monitorare. È possibile specificare un set di condizioni da monitorare per le modifiche, un set di campi delle informazioni della stampante da monitorare o entrambi.

Un'operazione di attesa nell'handle di notifica delle modifiche ha esito positivo quando si verifica una delle modifiche specificate nella stampante o nel server di stampa specificato. Si chiama quindi la funzione FindNextPrinterChangeNotification per recuperare informazioni sulla modifica e per reimpostare l'oggetto di notifica delle modifiche da usare nell'operazione di attesa successiva.

Sintassi

HANDLE FindFirstPrinterChangeNotification(
  _In_     HANDLE hPrinter,
           DWORD  fdwFilter,
           DWORD  fdwOptions,
  _In_opt_ LPVOID pPrinterNotifyOptions
);

Parametri

hPrinter [in]

Handle per la stampante o il server di stampa da monitorare. Usare la funzione OpenPrinter o AddPrinter per recuperare un handle della stampante.

fdwFilter

Le condizioni che causano l'immissione dello stato segnalato dall'oggetto di notifica di modifica. Una notifica di modifica si verifica quando vengono soddisfatte una o più delle condizioni specificate. Il parametro fdwFilter può essere zero se pPrinterNotifyOptions non è NULL.

Questo parametro può essere uno o più dei valori seguenti.

Valore Significato
PRINTER_CHANGE_FORM
Notifica delle modifiche apportate a un modulo. È possibile impostare questo flag generale o uno o più dei flag specifici seguenti:
PRINTER_CHANGE_ADD_FORM
PRINTER_CHANGE_SET_FORM
PRINTER_CHANGE_DELETE_FORM
PRINTER_CHANGE_JOB
Notificare le modifiche apportate a un processo. È possibile impostare questo flag generale o uno o più dei flag specifici seguenti:
PRINTER_CHANGE_ADD_JOB
PRINTER_CHANGE_SET_JOB
PRINTER_CHANGE_DELETE_JOB
PRINTER_CHANGE_WRITE_JOB
PRINTER_CHANGE_PORT
Notificare le modifiche apportate a una porta. È possibile impostare questo flag generale o uno o più dei flag specifici seguenti:
PRINTER_CHANGE_ADD_PORT
PRINTER_CHANGE_CONFIGURE_PORT
PRINTER_CHANGE_DELETE_PORT
PRINTER_CHANGE_PRINT_PROCESSOR
Notifica delle modifiche apportate a un processore di stampa. È possibile impostare questo flag generale o uno o più dei flag specifici seguenti:
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
PRINTER_CHANGE_PRINTER
Notifica delle modifiche apportate a una stampante. È possibile impostare questo flag generale o uno o più dei flag specifici seguenti:
PRINTER_CHANGE_ADD_PRINTER
PRINTER_CHANGE_SET_PRINTER
PRINTER_CHANGE_DELETE_PRINTER
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
PRINTER_CHANGE_PRINTER_DRIVER
Notifica delle modifiche apportate a un driver della stampante. È possibile impostare questo flag generale o uno o più dei flag specifici seguenti:
PRINTER_CHANGE_ADD_PRINTER_DRIVER
PRINTER_CHANGE_SET_PRINTER_DRIVER
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
PRINTER_CHANGE_ALL
Notifica se si verificano una delle modifiche precedenti.
PRINTER_CHANGE_SERVER
Windows 7: notificare le modifiche apportate al server.
Questo flag non è incluso nelle modifiche monitorate impostando il valore di PRINTER_CHANGE_ALL .

Per le descrizioni dei flag più specifici nella tabella precedente, vedere la funzione FindNextPrinterChangeNotification .

fdwOptions

Flag che determina la categoria di stampanti per cui funzioneranno le notifiche.

Valore Significato
PRINTER_NOTIFY_CATEGORY_ALL
0x001000
FindNextPrinterChangeNotification restituisce notifiche per stampanti 2D e 3D.
PRINTER_NOTIFY_CATEGORY_3D
0x002000
FindNextPrinterChangeNotification restituisce notifiche solo per le stampanti 3D.

Quando questo flag è impostato su zero (0), FindFirstPrinterChangeNotification funzionerà solo per le stampanti 2D. Si tratta del valore predefinito.

pPrinterNotifyOptions [in, facoltativo]

Puntatore a una struttura PRINTER_NOTIFY_OPTIONS . Il membro pTypes di questa struttura è una matrice di una o più strutture PRINTER_NOTIFY_OPTIONS_TYPE , ognuna delle quali specifica un campo informazioni sulla stampante da monitorare. Una notifica di modifica si verifica quando uno o più campi specificati cambiano. Quando si verifica una modifica, la funzione FindNextPrinterChangeNotification può recuperare le nuove informazioni sulla stampante. Questo parametro può essere NULL se fdwFilter è diverso da zero.

Per un elenco di campi che possono essere monitorati, vedere PRINTER_NOTIFY_OPTIONS_TYPE.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un handle per un oggetto di notifica di modifica associato alla stampante o al server di stampa specificato.

Se la funzione ha esito negativo, il valore restituito è INVALID_HANDLE_VALUE.

Commenti

Nota

Si tratta di una funzione di blocco o sincrona e potrebbe non restituire immediatamente. La velocità con cui questa funzione restituisce dipende da fattori di runtime come lo stato della rete, la configurazione del server di stampa e i fattori di implementazione del driver della stampante difficili da prevedere durante la scrittura di un'applicazione. La chiamata a questa funzione da un thread che gestisce l'interazione con l'interfaccia utente potrebbe rendere l'applicazione non rispondente.

Per monitorare una stampante o un server di stampa, chiamare la funzione FindFirstPrinterChangeNotification , quindi usare l'handle dell'oggetto notifica delle modifiche restituito in una chiamata a una delle funzioni di attesa. Un'operazione di attesa in un oggetto di notifica di modifica viene soddisfatta quando l'oggetto di notifica di modifica entra nello stato segnalato. Il sistema segnala l'oggetto quando si verifica una o più modifiche specificate da fdwFilter o pPrinterNotifyOptions nella stampante monitorata o nel server di stampa.

Quando si chiama FindFirstPrinterChangeNotification, fdwFilter deve essere diverso da zero o pPrinterNotifyOptions non NULL. Se vengono specificati entrambi, le notifiche verranno eseguite per entrambe.

Quando un'operazione di attesa in un oggetto di notifica delle modifiche della stampante viene soddisfatta, chiamare la funzione FindNextPrinterChangeNotification per determinare la causa della notifica. Per una condizione specificata da fdwFilter, FindNextPrinterChangeNotification segnala la condizione o le condizioni modificate. Per un campo informazioni sulla stampante specificato da pPrinterNotifyOptions, FindNextPrinterChangeNotification segnala il campo o i campi che sono stati modificati e le nuove informazioni per questi campi. FindNextPrinterChangeNotification reimposta anche l'oggetto notifica delle modifiche allo stato non firmato in modo da poterlo usare in un'altra operazione di attesa per continuare a monitorare la stampante o il server di stampa.

Con un'eccezione, non chiamare la funzione FindNextPrinterChangeNotification se l'oggetto di notifica di modifica non è nello stato segnalato. Se la funzione wait restituisce il valore WAIT_TIMEOUT, l'oggetto change non è nello stato segnalato. Chiamare la funzione FindNextPrinterChangeNotification solo se la funzione di attesa riesce senza timeout. L'eccezione è quando FindNextPrinterChangeNotification viene chiamato con il bit PRINTER_NOTIFY_OPTIONS_REFRESH impostato nel parametro pPrinterNotifyOptions .

Quando non è più necessario l'oggetto di notifica di modifica, chiuderlo chiamando la funzione FindClosePrinterChangeNotification .

I chiamanti di FindFirstPrinterChangeNotification devono assicurarsi che l'handle della stampante passato a FindFirstPrinterChangeNotification rimanga valido fino a quando non viene chiamato FindClosePrinterChangeNotification . Se l'handle della stampante viene chiuso prima dell'handle di notifica delle modifiche della stampante, non sarà possibile recapitare ulteriori notifiche.

FindFirstPrinterChangeNotification non invierà notifiche di modifica per le stampanti 3D agli handle del server.

Nota

In Windows XP con Service Pack 2 (SP2) e versioni successive, Internet Connection Firewall (ICF) blocca le porte della stampante per impostazione predefinita, ma è possibile abilitare un'eccezione per La condivisione file e stampa. Se un utente effettua una connessione stampante a un altro computer e l'eccezione non è abilitata, l'utente non riceverà notifiche di modifica della stampante dal server. Un amministratore del computer dovrà abilitare l'eccezione.

Requisiti

Requisito Valore
Client minimo supportato
Windows 2000 Professional [solo app desktop]
Server minimo supportato
Windows 2000 Server [solo app desktop]
Intestazione
Winspool.h (include Windows.h)
Libreria
Winspool.lib
DLL
Spoolss.dll

Vedi anche

Stampa

Funzioni dell'API spooler di stampa

FindClosePrinterChangeNotification

FindNextPrinterChangeNotification

OpenPrinter

PRINTER_NOTIFY_OPTIONS

PRINTER_NOTIFY_OPTIONS_TYPE