`

调用API弹出打印机属性对话框

阅读更多

调用api弹出打印机属性对话框 
Author:vitoriatang
From:Internet
.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);
            }


 
分享到:
评论

相关推荐

    精彩编程与编程技巧-调用“添加打印机”对话框...

    在上述示例中,我们调用了`shell32.dll`中的`SHHelpShortcuts_RunDLLAddPrinter`函数来弹出“添加打印机”对话框。`shell32.dll`是Windows操作系统中的一个核心DLL,提供了许多与桌面环境相关的API函数,包括文件...

    vc源码弹出打印设置对话框

    - 要弹出打印对话框,首先需要实例化一个`CPrintDialog`对象,然后可以设置其属性,如是否允许用户选择打印机、纸张大小等。接着调用`DoModal()`方法会显示对话框,并等待用户进行交互。 3. **使用代码示例** ```...

    B/S结构调用客户端默认打印机直接打印

    当用户在客户端(通常是Web浏览器)上打开一个网页并点击“打印”按钮时,常规操作是弹出一个打印机选择对话框,让用户选择要使用的打印机。然而,在某些场景下,为了提高用户体验或者出于自动化的需求,开发者可能...

    直接打印PDF文件,不弹出打印设置窗口

    打印PDF文件是常见的需求,但有时我们可能需要在特定场景下避免打印设置窗口弹出,直接进行默认打印。这通常涉及到编程接口(API)的使用或特定软件的设置。以下将详细介绍如何实现这一目标。 首先,我们来理解PDF...

    C++ Builder实现调用打印机打印图片

    8. **打印对话框**: 如果需要用户选择打印机或设置打印选项,可以使用`PrintDlg()`函数弹出打印对话框。 9. **错误处理**: 在整个过程中,应该捕获可能出现的错误并进行适当的处理。例如,检查函数调用的返回值,...

    浏览器不弹出打印窗口, 直接调动打印机打印 静默打印程序

    针对“浏览器不弹出打印窗口, 直接调动打印机打印 静默打印程序”的需求,我们将主要探讨如何使用Java编程语言实现这一功能。 首先,Java提供了丰富的API来处理打印任务,这些API集中在`java.awt.print`和`javax....

    h5+连接蓝牙打印机打印小票

    2. 使用`navigator.bluetooth.requestDevice()`方法选择或扫描蓝牙打印机设备,通常会弹出设备选择对话框。 3. 连接选定的设备,并获取其对应的服务和服务中的特征值。 4. 编写ESC/POS指令序列,根据需求定制打印...

    调用颜色对话框填充目标图形

    调用`DoModal()`方法可以弹出对话框,用户选择颜色后,可以通过`GetColor()`方法获取所选颜色的RGB值。 2. **图形绘制基础**:在MFC的单文档界面(SDI)应用中,通常使用`CView`或其派生类进行绘图操作。我们需要...

    J2EEweb调用本地斑马条码打印机打印条码

    这里特别注意的是,通过`ServiceUI.printDialog()`弹出一个对话框供用户选择打印机,增强了应用的交互性和灵活性。 2. **创建打印作业**:在`start()`方法中,当打印服务`service`不为空时,通过`createPrintJob()`...

    监控打印机状态 delphi

    当事件发生时,比如打印机报告卡纸,程序可以通过弹出警告对话框、记录日志或发送通知邮件等方式提醒用户。 6. **响应打印状态**: 当打印机状态改变,例如打印完成或出现故障,程序应当能够做出反应。例如,如果...

    Windows API函数大全

    ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接 DeleteForm 从打印机可用表单列表中删除一个表单 DeleteMonitor 删除指定的打印监视器 DeletePort 启动"删除端口"对话框,允许用户从当前...

    VB6写的打印机任务监控

    此外,通过对话框(Dialog Box)可以弹出提示或设置界面,让用户对打印机进行更高级的操作。 5. **错误处理**:在监控过程中,可能会遇到各种错误,如打印机未响应、权限问题等。因此,良好的错误处理机制是必要的...

    VC打印机编程

    6. **打印机对话框**:为了方便用户选择打印机和设置打印参数,可以使用`PrintDlg`函数弹出标准的打印对话框。通过处理对话框的返回值,开发者可以获取用户的打印设置,并更新到`DEVMODE`结构中。 7. **自定义...

    Color-Print-Font.rar_菜单 对话框

    当用户点击“打印”菜单项时,这个对话框会弹出。在打印对话框中,用户可以预览打印效果,确保文档按照预期的方式输出。在编程中,通常会使用打印API(如Windows的`PrintDlg`函数或跨平台的`QPrinter`类)来创建和...

    VC控制打印机打印预览源码

    在用户界面上,通常会有一个“打印”按钮,点击后弹出打印对话框。这个对话框可以通过调用CWinApp的DoModalPrint()方法生成,让用户选择打印机、设置页数等。一旦用户确认,程序将根据选定的设置来调用上述的打印...

    html前台打印小票(免弹框)

    本文将详细介绍一种能够避免弹出选择打印机对话框的HTML前台打印小票的方法。 首先,我们需要了解如何在HTML中引入打印控件。在提供的压缩包`printer`中,可能包含了一个自定义的打印控件或库,这个控件允许开发者...

    Excel-VBA宏编程实例源代码-获取已设置的打印机的名称.zip

    最后,我们使用`MsgBox`函数弹出一个对话框,显示打印机的名称。 值得注意的是,`ActivePrinter`属性返回的字符串可能包含额外的信息,比如打印机的路径和设备设置。例如:"HP LaserJet Pro M404n on Ne02:"。如果...

    electron实现静默打印的示例代码

    printDialog组件用于弹出打印机设置对话框,而pinter组件则是负责处理打印逻辑的关键组件。在模板部分,可以看到一个表格列出了数据,每一行数据都有一个打印按钮。当用户点击打印按钮时,会触发doPrint方法,将行...

    Windows API函数大全(整理精华版

    - 如`CreateMenu`创建菜单,`AppendMenu`添加菜单项,`TrackPopupMenu`显示弹出式菜单,`CheckMenuItem`和`EnableMenuItem`控制菜单项的状态。 7. **API之位图、图标和光栅运算函数** - 包括加载和绘制位图(`...

Global site tag (gtag.js) - Google Analytics