热点推荐:ASP.Net | ADO.Net | VB.Net | Web服务器 | Access | MSSQL | MySQL | Oracle | .Net控件 | Win 9x | Win 2000 | Win 2003 | DOS | Unix | 注册表 | 应用其它 | 安装调试 | 基本操作 | 使用技巧 | 系统优化 |故障处理 | 个性风格 | 病毒安全 | 专杀工具
您现在的位置: 中华IT技术网 >> .Net >> C# >> 正文
全文
调用API弹出打印机属性对话框
作者:1024k    文章来源:本站原创    点击数:    更新时间:2007-9-19

.NET Framework封装了很多关于打印的对话框,比如说PrintDialog, PageSetupDialog.
但是有的时候我们还需要关心打印机属性对话框,那么就可以调用API来解决这个问题。有几个API函数与之相关
PrinterProperties
DocumentProperties
OpenPrinter
ClosePrinter
逐一介绍

PrinterProperties
显示打印机属性对话框。

DocumentProperties
显示打印机配置对话框。

OpenPrinter
打开打印机

ClosePrinter
关闭打印机

在调用PrinterProperties或者DocumentProperties的时候,都需要先调用OpenPrinter,并在结束后调用ClosePrinter。

至于打印机属性和打印机配置有什么不同,就自己领会了。更为详尽的信息可以查阅msdn

Sample codes:
1. 声明API函数
       [System.Runtime.InteropServices.DllImportAttribute("winspool.drv", SetLastError = true)]
       public extern static int DocumentProperties(
            IntPtr hWnd,              // handle to parent window
            IntPtr hPrinter,           // handle to printer object
            string pDeviceName,   // device name
            ref IntPtr pDevModeOutput, // modified device mode
            ref IntPtr pDevModeInput,   // original device mode
            int fMode);                 // mode options

        [System.Runtime.InteropServices.DllImportAttribute("winspool.drv")]
        public static extern int PrinterProperties(
            IntPtr hwnd,  // handle to parent window
            IntPtr hPrinter); // handle to printer object

         [System.Runtime.InteropServices.DllImportAttribute("winspool.drv", SetLastError = true)]
        public extern static int OpenPrinter(
            string pPrinterName,   // printer name
            ref IntPtr hPrinter,      // handle to printer object
            ref IntPtr pDefault);    // handle to default printer object.

        [System.Runtime.InteropServices.DllImportAttribute("winspool.drv", SetLastError = true)]
        public static extern int ClosePrinter(
            IntPtr phPrinter); // handle to printer object

2.调用DocumentProperties
private void documentPropButton_Click(object sender, EventArgs e)
        {
            string printerName = _document.PrinterSettings.PrinterName;

            if (printerName != null && printerName.Length > 0)
            {
                IntPtr pPrinter = IntPtr.Zero;
                IntPtr pDevModeOutput = IntPtr.Zero;
                IntPtr pDevModeInput = IntPtr.Zero;
                IntPtr nullPointer = IntPtr.Zero;

                 OpenPrinter(printerName, ref pPrinter, ref nullPointer);

                int iNeeded = DocumentProperties(this.Handle, pPrinter, printerName, ref pDevModeOutput, ref pDevModeInput, 0);
                pDevModeOutput = System.Runtime.InteropServices.Marshal.AllocHGlobal(iNeeded);
                DocumentProperties(this.Handle, pPrinter, printerName, ref pDevModeOutput, ref pDevModeInput, DM_PROMPT);
                ClosePrinter(pPrinter);
            }
        }

3. 调用PrinterProperties
private void printPropButton_Click(object sender, EventArgs e)
        {
            string printerName = _document.PrinterSettings.PrinterName;

            if (printerName != null && printerName.Length > 0)
            {
                IntPtr pPrinter = IntPtr.Zero;
                IntPtr pDevModeOutput = IntPtr.Zero;
                IntPtr pDevModeInput = IntPtr.Zero;
                IntPtr nullPointer = IntPtr.Zero;

                 OpenPrinter(printerName, ref pPrinter, ref nullPointer);

                int iNeeded = PrinterProperties(this.Handle, pPrinter);
                ClosePrinter(pPrinter);
            }
        }

具体代码见例子  http://www.cnblogs.com/Files/VitoriaTang/PrinterAPI.rar

  • 上一篇文章:
  • 下一篇文章:
  • 相关文章
    最新更新
    编辑推荐
    热门图片
    频道大全
    文章阅读排行
    周排行
    月排行