据undocprint给它应该可以检索使用作业的假脱机文件的作业ID OpenPrinter
和ReadPrinter
使用字符串格式“PrinterName的,工作XXXX”打开打印机。 在MSDN文档列出这个方法好,虽然用逗号“PrinterName的,工作XXXX”后,额外的空间。
每当我试图从我的测试应用程序调用此方法(使用字符串格式),我得到ERROR_ACCESS_DENIED
(Windows 8的64位)。 这是为什么,什么,我需要做的就是这个工作?
我运行测试程序作为管理员,没有问题暂停工作或印表机或访问其它信息。
我知道我使用的ID是有效的,因为对于无效的ID返回ERROR_INVALID_PRINTER_NAME
代替。
我正在使用的代码:
public static void OpenPrinter(String printerName,
ref IntPtr printerHandle,
ref PRINTER_DEFAULTS defaults) {
if (OpenPrinter(printerName, ref printerHandle, ref defaults) == 0) {
throw new Win32Exception(Marshal.GetLastWin32Error(),
string.Format("Error getting access to printer: {0}", printerName));
}
}
[DllImport("winspool.drv", EntryPoint = "OpenPrinterW", SetLastError = true, CharSet = CharSet.Unicode,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int OpenPrinter(String pPrinterName, ref IntPtr phPrinter, ref PRINTER_DEFAULTS pDefault);
[StructLayout(LayoutKind.Sequential)]
public struct PRINTER_DEFAULTS {
public IntPtr pDatatype;
public IntPtr pDevMode;
public uint DesiredAccess;
}