zoukankan      html  css  js  c++  java
  • c++修改打印机名称

    
    
    
    
    
    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;

    一定要加这个设置权限,不然执行不成功。

  • 相关阅读:
    自定义查询条件存储过程
    管道分隔符Split
    开机进入boot menu和application menu,无法开机
    [SQL]SQL语言入门级教材_SQL数据操作基础(二)
    [SQL]SQL语言入门级教材_SQL功能与特性(一)
    编程规范(三)
    编程规范(二)
    类与结构的差别
    经典命名
    [SQL]SQL Server数据表的基础知识与增查删改
  • 原文地址:https://www.cnblogs.com/freedomworld/p/12050479.html
Copyright © 2011-2022 走看看