Avoir un PrintTicket
comment afficher la boîte de dialogue de configuration spécifique à l'imprimante? Remarque: Je ne veux pas dire PrintDialog
de l'espace de noms System.Windows.Controls
.Afficher la boîte de dialogue de configuration spécifique à l'imprimante
1
A
Répondre
2
Pour afficher la boîte de dialogue PrinterSettings utilisation
[DllImport("winspool.Drv", EntryPoint = "DocumentPropertiesW", SetLastError = true, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
static extern int DocumentProperties(
IntPtr hwnd,
IntPtr hPrinter,
[MarshalAs(UnmanagedType.LPWStr)] string pDeviceName,
IntPtr pDevModeOutput,
ref IntPtr pDevModeInput,
int fMode);
[DllImport("kernel32.dll")]
static extern IntPtr GlobalLock(IntPtr hMem);
[DllImport("kernel32.dll")]
static extern bool GlobalUnlock(IntPtr hMem);
[DllImport("kernel32.dll")]
static extern bool GlobalFree(IntPtr hMem);
private void OpenPrinterPropertiesDialog(PrinterSettings printerSettings) {
var handle = (new System.Windows.Interop.WindowInteropHelper(this)).Handle;
var hDevMode = printerSettings.GetHdevmode(printerSettings.DefaultPageSettings);
var pDevMode = GlobalLock(hDevMode);
var sizeNeeded = DocumentProperties(handle, IntPtr.Zero, printerSettings.PrinterName, pDevMode, ref pDevMode, 0);
var devModeData = Marshal.AllocHGlobal(sizeNeeded);
DocumentProperties(handle, IntPtr.Zero, printerSettings.PrinterName, devModeData, ref pDevMode, 14);
GlobalUnlock(hDevMode);
printerSettings.SetHdevmode(devModeData);
printerSettings.DefaultPageSettings.SetHdevmode(devModeData);
GlobalFree(hDevMode);
Marshal.FreeHGlobal(devModeData);
}
// Show this dialog.
var printQueue = LocalPrintServer.GetDefaultPrintQueue();
var settings = new PrinterSettings { PrinterName = printQueue.FullName };
OpenPrinterPropertiesDialog(settings);
3
Depuis que je ne suis pas assez fiable pour modifier la réponse acceptée, je posterai une deuxième réponse à la place ...
La réponse acceptée fonctionne bien pour affichage d'une boîte de dialogue d'imprimante native et obtention des modifications à partir de cette boîte de dialogue. Cependant, il ne définit pas correctement les propriétés de la boîte de dialogue.
Afin de pousser les paramètres dans la boîte de dialogue native, vous devez modifier la signature de DocumentProperties comme suit. La nouvelle signature n'utilise pas de paramètre ref en entrée.
Here is the page qui m'a indiqué cette petite différence, mais significative.
[DllImport("winspool.Drv", EntryPoint = "DocumentPropertiesW", SetLastError = true, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
static extern int DocumentProperties(
IntPtr hwnd,
IntPtr hPrinter,
[MarshalAs(UnmanagedType.LPWStr)] string pDeviceName,
IntPtr pDevModeOutput,
IntPtr pDevModeInput, //removed ref
int fMode);
Questions connexes
- 1. Retour à une boîte de dialogue spécifique
- 2. Afficher la boîte de dialogue à partir du script Linux
- 3. Afficher la boîte de dialogue de la méthode run()
- 4. Comment puis-je forcer PropertyGrid à afficher une boîte de dialogue personnalisée pour une propriété spécifique?
- 5. Afficher la boîte de dialogue d'entrée dans WinForms
- 6. Boîte de dialogue de couleur VB Excel spécifique
- 7. Boîte à outils Dojo: fermer la boîte de dialogue
- 8. Flash: Boîte de dialogue Téléchargement
- 9. Comment afficher une boîte de dialogue openfile sur Windows?
- 10. Boîte de dialogue modale
- 11. Comment afficher la boîte de dialogue de progression de la copie de fichiers Windows via PB?
- 12. boîte de dialogue de couleur
- 13. Une bonne boîte de dialogue "À propos"
- 14. Boîte de dialogue wpf dans la page
- 15. Boîte de dialogue de confirmation à l'exécution dans asp.net
- 16. boîte de dialogue visuel C++
- 17. Boîte de dialogue intégrée Excel
- 18. Comment afficher la boîte de dialogue de confirmation de suppression dans asp.net
- 19. Boîte de dialogue dans SCSF
- 20. Question de boîte de dialogue JQuery
- 21. Boîte de dialogue Message/Confirmer
- 22. Comment afficher une boîte de dialogue jquery avant le chargement complet de la page?
- 23. Comment afficher la boîte de dialogue jQuery au-dessus de YouTube Video/SlideShare PPT?
- 24. Boîte de dialogue C# catch
- 25. Boîte de dialogue VBA Word 2003
- 26. Boîte de dialogue modale avec plusieurs formulaires
- 27. Charger une autre page dans la boîte de dialogue
- 28. Boîte de dialogue de rappel de suppression
- 29. Boîte de dialogue non bloquante dans Applescript
- 30. Meilleure façon de passer un grand nombre d'arguments dans une boîte de dialogue de configuration