using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Interop;
namespace PrinterLib
{
public class PrinterHelper
{
#region API声明
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal struct structPrinterDefaults
{
[MarshalAs(UnmanagedType.LPTStr)]
public String pDatatype;
public IntPtr pDevMode;
[MarshalAs(UnmanagedType.I4)]
public int DesiredAccess;
};
const int DM_IN_BUFFER = 8;
const int DM_OUT_BUFFER = 2;
const int DM_IN_PROMPT = 4;
[DllImport("winspool.Drv", EntryPoint = "OpenPrinter", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall),
SuppressUnmanagedCodeSecurityAttribute()]
internal static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPTStr)] string printerName, out IntPtr phPrinter, ref structPrinterDefaults pd);
[DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall), SuppressUnmanagedCodeSecurityAttribute()]
internal static extern bool ClosePrinter(IntPtr phPrinter);
[DllImport("winspool.drv")]
public static extern int PrinterProperties(
IntPtr hwnd, // handle to parent window
IntPtr hPrinter); // handle to printer object
[DllImport("winspool.Drv", EntryPoint = "DocumentPropertiesA", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
internal static extern int DocumentProperties(IntPtr hwnd, IntPtr hPrinter, [MarshalAs(UnmanagedType.LPStr)] string pDeviceName, IntPtr pDevModeOutput, IntPtr pDevModeInput, int fMode);
#endregion
/// <summary>
/// 打印机属性
/// </summary>
/// <param name="printerName"></param>
/// <param name="win"></param>
public static void OpenPrinter(string printerName, Window win)
{
const int PRINTER_ACCESS_USE = 0x00000008;
const int PRINTER_ACCESS_ADMINISTER = 0x00000004;
structPrinterDefaults defaults = new structPrinterDefaults();
defaults.pDatatype = null;
defaults.pDevMode = IntPtr.Zero;
defaults.DesiredAccess = PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE;
IntPtr hPrinter = IntPtr.Zero;
//打开打印机
if (OpenPrinter(printerName, out hPrinter, ref defaults))
{
int i = PrinterProperties(new WindowInteropHelper(win).Handle, hPrinter);
}
}
/// <summary>
/// 打印机首选项
/// </summary>
/// <param name="printerName"></param>
/// <param name="win"></param>
public static void OpenPrinterProperties(string printerName, Window win)
{
const int PRINTER_ACCESS_USE = 0x00000008;
const int PRINTER_ACCESS_ADMINISTER = 0x00000004;
structPrinterDefaults defaults = new structPrinterDefaults();
defaults.pDatatype = null;
defaults.pDevMode = IntPtr.Zero;
defaults.DesiredAccess = PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE;
IntPtr hPrinter = IntPtr.Zero;
//打开打印机
if (OpenPrinter(printerName, out hPrinter, ref defaults))
{
int i = DocumentProperties(new WindowInteropHelper(win).Handle, hPrinter, printerName, IntPtr.Zero, IntPtr.Zero, DM_IN_BUFFER | DM_IN_PROMPT | DM_OUT_BUFFER);
}
}
}
}
c#通过winapi调打印机属性与首选项设置窗口
原创
©著作权归作者所有:来自51CTO博客作者lreach的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:wpf 附加依赖属性
下一篇:wpf image 打印(备忘)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
win10共享打印机给win7
win10共享打印机到win7
网络访问 win10 共享打印机 win7 -
HP7740彩色打印机无法打印彩色,首选项报错
HP7740 无法打印彩色 首选项无法设置
首选项 无法打印彩色 HP7740 -
网络打印机设置
网络打印机设置, 打开文档密码:andone
职场 休闲 网络打印机设置 -
SAP打印机设置
一、SAP打印原理 SAP的打印过程分两个步骤:创建假脱机请求创建输出请求在点击打印按钮后,系统会提示创建假
假脱机 windows系统 输出设备 -
北洋网络口打印机设置
北洋网络口打印机设置
北洋 网络 打印机 设置 -
android 小票打印机 打印样式 小票打印机设置格式
按照已有的模板打印小票<二>  
android 小票打印机 打印样式 C# ASP.net 赋值 Text -
复制容器内的日志到本地文件夹
我们把Linux命令按照在系统中的作用分成几个部分分别予以介绍。但是,还有一些命令不好划分,然而学习它们同样是比较重要的。 tar 1.作用 tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户。 2.格式 tar [主选项+
复制容器内的日志到本地文件夹 linux dos http服务器 ftp服务器