FindNextPrinterChangeNotification fonction)
La fonction FindNextPrinterChangeNotification récupère des informations sur la notification de modification la plus récente pour un objet de notification de modification associé à une imprimante ou à un serveur d’impression. Appelez cette fonction quand une opération d’attente sur l’objet de notification de modification est satisfaite.
La fonction réinitialise également l’objet de notification de modification à l’état non signalé. Vous pouvez ensuite utiliser l’objet dans une autre opération d’attente pour continuer à surveiller l’imprimante ou le serveur d’impression. Le système d’exploitation affecte à l’objet l’état signalé la prochaine fois qu’un jeu de modifications spécifié se produit sur l’imprimante ou le serveur d’impression. La fonction FindFirstPrinterChangeNotification crée l’objet de notification de modification et spécifie l’ensemble de modifications à surveiller.
Syntaxe
BOOL FindNextPrinterChangeNotification(
_In_ HANDLE hChange,
_Out_opt_ PDWORD pdwChange,
_In_opt_ LPVOID pPrinterNotifyOptions,
_Out_opt_ LPVOID *ppPrinterNotifyInfo
);
Paramètres
-
hChange [ dans]
-
Handle d’un objet de notification de modification associé à une imprimante ou à un serveur d’impression. Vous obtenez ce type de handle en appelant la fonction FindFirstPrinterChangeNotification . Le système d’exploitation définit cet objet de notification de modification à l’état signalé lorsqu’il détecte l’une des modifications spécifiées dans le filtre de notification de modification de l’objet.
-
pdwChange [ out, facultatif]
-
Pointeur vers une variable dont les bits sont définis pour indiquer les modifications qui se sont produites pour provoquer la notification la plus récente. Les indicateurs de bits qui peuvent être définis correspondent à ceux spécifiés dans le paramètre fdwFilter de l’appel FindFirstPrinterChangeNotification . Le système définit un ou plusieurs des indicateurs binaires suivants.
Valeur Signification - _Ajouter un _ _ formulaire de modification d’imprimante
Un formulaire a été ajouté au serveur. - changement d’imprimante _ _ Ajouter un _ travail
Un travail d’impression a été envoyé à l’imprimante. - changement d’imprimante _ _ Ajouter un _ port
Un port ou une analyse a été ajouté au serveur. - modification de l’imprimante _ _ Ajouter un _ processeur d’impression _
Un processeur d’impression a été ajouté au serveur. - modification de l’imprimante _ _ Ajouter l' _ imprimante
Une imprimante a été ajoutée au serveur. - changement d’imprimante _ _ Ajouter un _ pilote d’imprimante _
Un pilote d’imprimante a été ajouté au serveur. - _modifier le _ port de configuration de l’imprimante _
Un port a été configuré sur le serveur. - _formulaire de _ Suppression de modification d’imprimante _
Un formulaire a été supprimé du serveur. - _tâche de _ Suppression de modification d’imprimante _
Un travail a été supprimé. - _port de _ Suppression de modification d’imprimante _
Un port ou une analyse a été supprimé du serveur. - changement d’imprimante- _ _ supprimer le _ processeur d’impression _
Un processeur d’impression a été supprimé du serveur. - modification de l’imprimante _ _ Supprimer l' _ imprimante
Une imprimante a été supprimée. - modification de l’imprimante _ _ supprimer le _ pilote d’imprimante _
Un pilote d’imprimante a été supprimé du serveur. - _ _ imprimante échec de _ la modification de l’imprimante _
Une connexion d’imprimante a échoué. - _formulaire de modification de l’imprimante _ _
Un formulaire a été défini sur le serveur. - _travail d' _ ensemble de modifications d’imprimante _
Un travail a été défini. - imprimante de _ jeu de modifications d’imprimante _ _
Une imprimante a été définie. - _pilote d' _ imprimante de jeu de modifications d’imprimante _ _
Un pilote d’imprimante a été défini. - _travail d' _ écriture de modification d’imprimante _
Les données du travail ont été écrites. - _délai de modification de l’imprimante _
Le travail a expiré. - _serveur de changement d’imprimante _
Windows 7 : une modification s’est produite sur le serveur. -
pPrinterNotifyOptions [ dans, facultatif]
-
Pointeur vers une structure d' _ _ options de notification d’imprimante . Définissez le membre Flags de cette structure sur _ options Notify d’imprimante _ _ Actualiser pour que la fonction retourne les données actuelles pour tous les champs d’informations d’imprimante analysés. La fonction ignore tous les autres membres de la structure. Ce paramètre peut être NULL.
-
ppPrinterNotifyInfo [ out, facultatif]
-
Pointeur vers une variable pointeur qui reçoit un pointeur vers une mémoire tampon en lecture seule allouée par le système. Appelez la fonction FreePrinterNotifyInfo pour libérer la mémoire tampon lorsque vous n’en avez plus besoin. Ce paramètre peut avoir la valeur null si aucune information n’est requise.
La mémoire tampon contient une structure d' _ _ informations de notification d’imprimante , qui contient un tableau de structures de _ _ _ données d’informations de notification d’imprimante . Chaque élément du tableau contient des informations sur l’un des champs spécifiés dans le paramètre pPrinterNotifyOptions de l’appel FindFirstPrinterChangeNotification . En règle générale, la fonction fournit uniquement des données pour les champs qui ont été modifiés pour provoquer la notification la plus récente. Toutefois, si la structure vers laquelle pointe le paramètre pPrinterNotifyOptions spécifie l’actualisation des options de notification d' imprimante _ _ _, la fonction fournit des données pour tous les champs surveillés.
Si le bit d' informations de notification d’imprimante _ _ _ rejeté est défini dans le membre Flags de la structure d' informations de _ notification _ d’imprimante , un dépassement de capacité ou une erreur se sont produits et des notifications ont peut-être été perdues. Dans ce cas, aucune notification supplémentaire n’est envoyée tant que vous n’avez pas effectué un deuxième appel FindNextPrinterChangeNotification qui spécifie l' _ _ _ actualisation des options Notify de l’imprimante.
Valeur retournée
Si la fonction est réussie, la valeur de retour est une valeur différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro.
Remarques
Notes
Il s’agit d’une fonction de blocage ou synchrone qui peut ne pas être renvoyée immédiatement. La vitesse à laquelle cette fonction est retournée dépend des facteurs d’exécution tels que l’état du réseau, la configuration du serveur d’impression et les facteurs d’implémentation des pilotes d’imprimante qui sont difficiles à prédire lors de l’écriture d’une application. L’appel de cette fonction à partir d’un thread qui gère l’interaction avec l’interface utilisateur peut faire que l’application semble ne pas répondre.
Appelez la fonction FindNextPrinterChangeNotification après la satisfaction d’une opération d’attente sur un objet de notification créé par FindFirstPrinterChangeNotification . L’appel de FindNextPrinterChangeNotification vous permet d’obtenir des informations sur la modification qui a respecté l’opération d’attente et réinitialise l’objet de notification afin qu’il puisse être signalé lorsque la modification suivante se produit.
À une exception près, n’appelez pas la fonction FindNextPrinterChangeNotification si l’objet de notification de modification n’est pas dans l’état signalé. Si une fonction Wait retourne le _ délai d' attente de la valeur, l’objet de modification n’est pas dans l’état signalé. Appelez la fonction FindNextPrinterChangeNotification uniquement si la fonction Wait est réussie sans dépassement du délai d’attente. L’exception est quand FindNextPrinterChangeNotification est appelé avec le bit d’actualisation des options de notification d’imprimante défini dans le paramètre pPrinterNotifyOptions . _ _ _ Notez que même lorsque cet indicateur est défini, il est toujours possible de définir l’indicateur d’informations de notification d’imprimante dans le paramètre ppPrinterNotifyInfo . _ _ _
Pour continuer à surveiller les modifications apportées à l’imprimante ou au serveur d’impression, répétez le cycle de l’appel de l’une des fonctions d’attente , puis appelez la fonction FindNextPrinterChangeNotification pour examiner la modification et réinitialiser l’objet de notification.
FindNextPrinterChangeNotification peut combiner plusieurs modifications apportées au même champ d’informations d’imprimante en une seule notification. Dans ce cas, la fonction réduit généralement toutes les modifications apportées au champ en une seule entrée dans le tableau des structures de données d’informations de notification d’imprimante _ _ _ dans ppPrinterNotifyInfo; l’entrée unique signale uniquement les informations les plus récentes. Toutefois, pour certains champs d’informations sur les travaux et les imprimantes, la fonction peut retourner plusieurs entrées de tableau pour le même champ. Dans ce cas, la dernière entrée de tableau pour le champ signale les données actuelles, et les entrées précédentes contiennent les données pour les étapes intermédiaires.
Lorsque vous n’avez plus besoin de l’objet de notification de modification, fermez-le en appelant la fonction FindClosePrinterChangeNotification .
Notes
dans Windows XP avec Service Pack 2 (SP2) et versions ultérieures, le pare-feu de connexion Internet (ICF) bloque les ports d’imprimante par défaut, mais une exception pour le partage de fichiers et d’imprimantes peut être activée. Si un utilisateur établit une connexion d’imprimante avec un autre ordinateur et que l’exception n’est pas activée, l’utilisateur ne reçoit pas de notifications de modification d’imprimante à partir du serveur. Un administrateur d’ordinateur devra activer l’exception.
Exemples
L’exemple de code suivant illustre la façon dont vous pouvez surveiller l’état de l’imprimante à l’aide de ces fonctions.
// Get change notification handle for the printer
chgObject = FindFirstPrinterChangeNotification(
hPrinter,
PRINTER_CHANGE_JOB,
0,
NULL);
if (chgObject != INVALID_HANDLE_VALUE) {
while (bKeepMonitoring) {
// Wait for the change notification
WaitForSingleObject(chgObject, INFINITE);
fcnreturn = FindNextPrinterChangeNotification(
chgObject,
pdwChange,
NULL,
NULL);
if (fcnreturn) {
// Check value of *pdwChange and
// deal with the indicated change
}
// Insert some mechanism to stop monitoring
// such as:
//
// if (something happens) {
// bKeepMonitoring = false;
// }
//
}
// Close Printer Change Notification handle when finished.
FindClosePrinterChangeNotification(chgObject);
} else {
// Unable to open printer change notification handle
dwStatus = GetLastError();
}
Configuration requise
| Condition requise | Valeur |
|---|---|
| Client minimal pris en charge |
Windows 2000 Professionnel - [Applications de bureau uniquement] |
| Serveur minimal pris en charge |
Windows 2000 Server - [Applications de bureau uniquement] |
| En-tête |
|
| Bibliothèque |
|
| DLL |
|