public static bool SetPrinterName(string OldName, string newName) { IntPtr hPrinter; PrintAPI.structPrinterDefaults defaults = new PrintAPI.structPrinterDefaults(); defaults.pDatatype = null; defaults.pDevMode = IntPtr.Zero; defaults.DesiredAccess = PrintAPI.PRINTER_ACCESS_ADMINISTER | PrintAPI.PRINTER_ACCESS_USE; if (PrintAPI.OpenPrinter(OldName, out hPrinter, ref defaults)) { int cbNeeded = 0; bool bolRet = PrintAPI.GetPrinter(hPrinter, 2, IntPtr.Zero, 0, out cbNeeded); if (cbNeeded >= 0) { IntPtr pAddr = Marshal.AllocHGlobal((int)cbNeeded); bolRet = PrintAPI.GetPrinter(hPrinter, 2, pAddr, cbNeeded, out cbNeeded); if (bolRet) { PrintAPI.PRINTER_INFO_2 info6 = new PrintAPI.PRINTER_INFO_2(); info6 = (PrintAPI.PRINTER_INFO_2)Marshal.PtrToStructure(pAddr, typeof(PrintAPI.PRINTER_INFO_2)); info6.pPrinterName = newName; IntPtr pPrinter = Marshal.AllocHGlobal(Marshal.SizeOf(info6)); Marshal.StructureToPtr(info6, pPrinter, false); bolRet = PrintAPI.SetPrinter(hPrinter, 2, pPrinter, 0); Marshal.FreeHGlobal(pPrinter); } Marshal.FreeHGlobal(pAddr); } PrintAPI.ClosePrinter(hPrinter); return bolRet; } return false; } 原文链接:https://blog.csdn.net/wf2397108372/article/details/91046286
注意事项:
PrintAPI.structPrinterDefaults defaults = new PrintAPI.structPrinterDefaults();
defaults.pDatatype = null;
defaults.pDevMode = IntPtr.Zero;
defaults.DesiredAccess = PrintAPI.PRINTER_ACCESS_ADMINISTER | PrintAPI.PRINTER_ACCESS_USE;
一定要加这个设置权限,不然执行不成功。