La boîte de dialogue Enregistrer sous s’affiche derrière l’application qui imprime sur l’enregistreur de documents 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 imprime sur une imprimante enregistreur de documents XPS et où l’application cesse de répondre.

Version d’origine du produit : Enregistreur de documents XPS
Numéro de la base de connaissances d’origine : 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 sur une imprimante MxDW (Microsoft XPS Document Writer). Dans ce scénario, la boîte de dialogue Enregistrer sous s’affiche derrière l’application.

En outre, vous pouvez rencontrer les symptômes suivants :

  • L’application semble cesser de répondre (se bloquer) jusqu’à ce que vous entrez un nom de fichier ou annulez la tâche d’impression.
  • L’application qui imprime ne devient pas l’application de premier plan (active) lorsque la boîte de dialogue Enregistrer sous est fermée.

Remarque

Ce problème peut également se produire lorsque vous imprimez sur une autre imprimante dont le pilote affiche la boîte de dialogue Enregistrer sous ou une autre boîte de dialogue modale. Le pilote d’imprimante pour 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 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 Splwow64.exe. Splwow64.exe est un processus 64 bits qui peut charger des pilotes d’imprimante 64 bits et qui 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 processus Splwow64.exe appelle le pilote d’imprimante XPS Document Writer pour l’application 32 bits. Dans ce scénario, la boîte de dialogue Enregistrer sous n’est pas propriétaire, car le thread du processus Splwow64.exe n’a pas de fenêtre active. La boîte de dialogue peut apparaître derrière l’application qui imprime, car le processus Splwow64.exe n’a pas l’autorisation de définir la fenêtre de premier plan. En outre, étant donné que le dialogue n’est pas propriétaire, l’application qui a appelé la StartDoc fonction peut ne pas devenir l’application de premier plan lorsque le dialogue est fermé.

L’appel StartDoc n’est pas retourné tant que la boîte de dialogue n’est pas ignorée, de sorte que l’application peut sembler cesser de répondre.

La boîte de dialogue Enregistrer sous a son propre bouton dans la barre des tâches de Windows Explorer si elle est créée par le processus Splwow64.exe. Cela est dû au fait que la boîte de dialogue n’est pas propriétaire. Le bouton de la barre des tâches clignote également lorsque le processus 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 son bouton de barre des tâches. Vous pouvez également 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 quand l’utilisateur imprime sur l’imprimante XpS Document Writer ou sur l’imprimante Adobe PDF. L’application spécifie ensuite le chemin complet d’un fichier dans le membre de structure lors de l’appel DOCINFO.lpszOutput 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.