Задайте вопросЗадайте вопрос
 

Вопросwpf: Open printing preferences without print dialog

Все ответы

  • 16 мая 2009 г. 10:58sarafuddin Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    Try this :

    [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)
            {
                IntPtr handle = (new System.Windows.Interop.WindowInteropHelper(this.fullScreenPrintWindow)).Handle;
                IntPtr hDevMode = printerSettings.GetHdevmode(printerSettings.DefaultPageSettings);
                IntPtr pDevMode = GlobalLock(hDevMode);
                int sizeNeeded = DocumentProperties(handle, IntPtr.Zero, printerSettings.PrinterName, pDevMode, ref pDevMode, 0);
                IntPtr 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);
            }
    [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)
            {
            //fullScreenPrintWindow in this example is a window. 
                IntPtr handle = (new System.Windows.Interop.WindowInteropHelper(this.fullScreenPrintWindow)).Handle;
                IntPtr hDevMode = printerSettings.GetHdevmode(printerSettings.DefaultPageSettings);
                IntPtr pDevMode = GlobalLock(hDevMode);
                int sizeNeeded = DocumentProperties(handle, IntPtr.Zero, printerSettings.PrinterName, pDevMode, ref pDevMode, 0);
                IntPtr 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);
            }
    
    //Somewhere in you code show the dialog using this : 
    
                PrinterSettings settings = new PrinterSettings();
                settings.PrinterName = CurrentPrinter.FullName;
                OpenPrinterPropertiesDialog(settings);