Partager via


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 d’enregistreur de documents XPS et que l’application cesse de répondre.

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

Symptômes

Examinez le cas 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 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 (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 (actif) lorsque la boîte de dialogue Enregistrer sous est fermée.

Note

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 de 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 qui gère l’impression pour les processus 32 bits.

Lorsqu’une application appelle la StartDoc fonction pour imprimer à l’imprimante de l’enregistreur de documents XPS, le pilote d’imprimante enregistreur de documents XPS 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 traite les appels au pilote d’imprimante xpS Document Writer pour l’application 32 bits. Dans ce scénario, la boîte de dialogue Enregistrer sous n’est pasownée, 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’est pas autorisé à définir la fenêtre de premier plan. En outre, étant donné que la boîte de dialogue n’est pas noyée, 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’appel StartDoc ne retourne pas tant que la boîte de dialogue n’est pas ignorée. L’application peut donc sembler cesser de répondre.

La boîte de dialogue Enregistrer sous comporte 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 n’est pas noyée. Le bouton de la barre des tâches clignote également lorsque le processus de 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 basculer le focus vers la boîte de dialogue.

Plus d’informations

Les développeurs de logiciels peuvent éviter ce problème dans leurs applications 32 bits en détectant ces applications lorsque 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 la 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.