java弹出窗口api_调用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);

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部