La boîte de dialogue Enregistrer sous s’affiche derrière l’application qui est en cours d’impression vers le writer de document XPS.

Cet article vous aide à résoudre un problème où la boîte de dialogue Enregistrer sous est masquée derrière l’application qui est en cours d’impression sur une imprimante XPS document Writer et que l’application cesse de répondre.

Version du produit d’origine :   Enregistreur de documents XPS
Numéro de la base de connaissances initiale :   2567869

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous exécutez une application 32 bits sur une version 64 bits de Windows 7.
  • Vous imprimez à partir de l’application vers une imprimante Microsoft XPS document Writer (MXDW). Dans ce scénario, la boîte de dialogue Enregistrer sous   s’affiche derrière l’application.

En outre, vous pouvez être confronté aux problèmes suivants :

  • L’application semble cesser de répondre (se bloquer) jusqu’à ce que vous entriez un nom de fichier ou que vous annuliez la tâche d’impression.
  • L’application d’impression ne devient pas l’application de premier plan (active) lors de la fermeture de la boîte de dialogue Enregistrer sous .

Notes

Ce problème peut également se produire lorsque vous imprimez sur une imprimante différente dont le pilote affiche la boîte de dialogue Enregistrer sous   ou une autre boîte de dialogue modale. Le pilote d’imprimante de l’imprimante Adobe PDF est ce type de pilote.

Cause

Les pilotes d’imprimante sont implémentés en tant que bibliothèques de liens dynamiques (dll) chargées dans un processus qui est en cours d’impression. Les pilotes d’imprimante sont implémentés en tant que dll 64 bits sur les versions 64 bits de Windows et en tant que dll 32 bits sur les versions 32 bits de Windows.

Un processus 32 bits ne peut pas charger les dll 64 bits. Par conséquent, les versions 64 bits de Windows prennent en charge l’impression à partir de processus 32 bits via le processus de Splwow64.exe. Splwow64.exe est un processus 64 bits qui peut charger des pilotes d’imprimante 64 bits et gère l’impression pour les processus 32 bits.

Lorsqu’une application appelle la StartDoc fonction pour imprimer sur l’imprimante XPS document Writer, le pilote d’imprimante XPS document Writer affiche une boîte de dialogue Enregistrer sous afin que les utilisateurs puissent spécifier le nom et l’emplacement du fichier XPS. La fenêtre propriétaire de la boîte de dialogue est généralement la fenêtre active du thread qui appelle la StartDoc fonction, et la boîte de dialogue s’affiche sur la fenêtre active.

Lorsqu’une application 32 bits appelle la StartDoc fonction sur une version 64 bits de Windows, le Splwow64.exe traiter les appels entrants vers le pilote d’imprimante de document Writer XPS pour l’application 32 bits. Dans ce scénario, la boîte de dialogue Enregistrer sous est sans propriétaire car le thread dans le processus de Splwow64.exe n’a pas de fenêtre active. La boîte de dialogue peut apparaître derrière l’application imprime, car le processus de Splwow64.exe n’est pas autorisé à définir la fenêtre de premier plan. Par ailleurs, dans la mesure où la boîte de dialogue est sans propriétaire, l’application qui a appelé la StartDoc fonction peut ne pas devenir l’application de premier plan lorsque la boîte de dialogue est fermée.

L' StartDoc appel n’est pas renvoyé tant que la boîte de dialogue n’est pas fermée ; l’application peut donc sembler cesser de répondre.

La boîte de dialogue Enregistrer sous possède son propre bouton dans la barre des tâches de l’Explorateur Windows s’il est créé par le processus de Splwow64.exe. Cela est dû au fait que la boîte de dialogue est sans propriétaire. Le bouton de la barre des tâches clignote également lorsque le processus d' Splwow64.exe ne peut pas définir la fenêtre de premier plan.

Solution de contournement

Pour contourner ce problème, vous pouvez accéder à la boîte de dialogue Enregistrer sous via le bouton de la barre des tâches. Sinon, vous pouvez appuyer sur Alt + Tab pour activer la boîte de dialogue.

Plus d’informations

Les développeurs de logiciels peuvent éviter ce problème dans leurs applications 32 bits en faisant en sorte que ces applications détectent lorsque l’utilisateur imprime sur l’imprimante XPS document Writer ou sur l’imprimante Adobe PDF. L’application spécifie ensuite le chemin d’accès complet à un fichier dans le membre de la DOCINFO.lpszOutput structure lors de l’appel de la StartDoc fonction. Le pilote d’imprimante utilise le fichier spécifié au lieu d’inviter l’utilisateur à entrer un fichier.

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.