protected static void SetDeviceInfo4(string name, PRINTER_INFO_4 newInfo) { IntPtr printerHandle; PrinterDefaults defaults = new PrinterDefaults { DesiredAccess = PRINTER_ACCESS.PrinterAllAccess }; if (!PrintPort.OpenPrinter(name, out printerHandle, ref defaults)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } try { IntPtr infoHandle = Marshal.AllocHGlobal(Marshal.SizeOf(newInfo)); Marshal.StructureToPtr(newInfo, infoHandle, false); try { if (!SetPrinter(printerHandle, 4, infoHandle, 0)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } } catch { throw; } finally { Marshal.FreeHGlobal(infoHandle); } } catch { throw; } finally { PrintPort.ClosePrinter(printerHandle); } }
public static void Uninstall(string name) { if (!name.EndsWith("\0")) { name += "\0"; } IntPtr handle = IntPtr.Zero; PrinterDefaults defaults = new PrinterDefaults { DesiredAccess = PRINTER_ACCESS.PrinterAllAccess }; try { if (!PrintPort.OpenPrinter(name, out handle, ref defaults)) { int errorCode = Marshal.GetLastWin32Error(); if (errorCode != ERROR_INVALID_PRINTER_NAME) { throw new Win32Exception(errorCode); } } if (!DeletePrinter(handle)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } } catch { throw; } finally { PrintPort.ClosePrinter(handle); } }
public static SmartPrintPort Install(string name) { IntPtr printerHandle; PrinterDefaults defaults = new PrinterDefaults { DesiredAccess = PRINTER_ACCESS.ServerAdmin }; try { if (!PrintPort.OpenPrinter(",XcvMonitor " + PrintMonitor.DEFAULT_MONITOR_NAME, out printerHandle, ref defaults)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } try { if (!name.EndsWith("\0")) { name += "\0"; } uint size = (uint)(name.Length * 2); IntPtr pointer = Marshal.AllocHGlobal((int)size); Marshal.Copy(name.ToCharArray(), 0, pointer, name.Length); IntPtr pOutputData = IntPtr.Zero; UInt32 outputNeeded, status; try { if (!PrintPort.XcvDataW(printerHandle, "AddPort", pointer, size, pOutputData, 0, out outputNeeded, out status)) { throw new Win32Exception((int)status); } } catch { throw; } finally { Marshal.FreeHGlobal(pointer); } } catch { throw; } finally { PrintPort.ClosePrinter(printerHandle); } } catch { throw; } return((new SmartPrintPort(name)).saveAllProperties()); }
protected static PRINTER_INFO_4 GetDeviceInfo4(string name) { IntPtr pHandle; PrinterDefaults defaults = new PrinterDefaults { DesiredAccess = PRINTER_ACCESS.PrinterUse }; try { if (!PrintPort.OpenPrinter(name, out pHandle, ref defaults)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } try { Int32 cbNeeded = 0; IntPtr pAddr = IntPtr.Zero; if (!GetPrinter(pHandle, 4, IntPtr.Zero, 0, out cbNeeded) || 0 > cbNeeded) { throw new Win32Exception(Marshal.GetLastWin32Error()); } pAddr = Marshal.AllocHGlobal((int)cbNeeded); try { if (!GetPrinter(pHandle, 4, pAddr, cbNeeded, out cbNeeded)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return((PRINTER_INFO_4)Marshal.PtrToStructure(pAddr, typeof(PRINTER_INFO_4))); } catch { throw; } finally { Marshal.FreeHGlobal(pAddr); } } catch { throw; } finally { PrintPort.ClosePrinter(pHandle); } } catch { throw; } }