首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >windows命令行上是否有添加本地打印机端口的命令?

windows命令行上是否有添加本地打印机端口的命令?
EN

Stack Overflow用户
提问于 2019-04-09 20:28:44
回答 2查看 235关注 0票数 0

对于PowerShell,我使用:

代码语言:javascript
运行
复制
Add-PrinterPort -Name "NameYourLocalPort:"

要添加本地打印机端口,请执行以下操作。

windows命令行中对应的命令是什么?

我已经阅读了这篇文章和其他一些答案,但它们不能解决我的问题。

Create a local port for a printer

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-15 18:13:07

代码语言:javascript
运行
复制
public static class Winspool
    {
        [StructLayout(LayoutKind.Sequential)]
        private class PRINTER_DEFAULTS
        {
            public string pDatatype;
            public IntPtr pDevMode;
            public int DesiredAccess;
        }

        [DllImport("winspool.drv", EntryPoint = "XcvDataW", SetLastError = true)]
        private static extern bool XcvData(
            IntPtr hXcv,
            [MarshalAs(UnmanagedType.LPWStr)] string pszDataName,
            IntPtr pInputData,
            uint cbInputData,
            IntPtr pOutputData,
            uint cbOutputData,
            out uint pcbOutputNeeded,
            out uint pwdStatus);

        [DllImport("winspool.drv", EntryPoint = "OpenPrinterA", SetLastError = true)]
        private static extern int OpenPrinter(
            string pPrinterName,
            ref IntPtr phPrinter,
            PRINTER_DEFAULTS pDefault);

        [DllImport("winspool.drv", EntryPoint = "ClosePrinter")]
        private static extern int ClosePrinter(IntPtr hPrinter);

        public static int AddLocalPort(string portName)
        {
            PRINTER_DEFAULTS def = new PRINTER_DEFAULTS();

            def.pDatatype = null;
            def.pDevMode = IntPtr.Zero;
            def.DesiredAccess = 1; //Server Access Administer

            IntPtr hPrinter = IntPtr.Zero;

            int n = OpenPrinter(",XcvMonitor Local Port", ref hPrinter, def);
            if (n == 0)
                return Marshal.GetLastWin32Error();

            if (!portName.EndsWith("\0"))
                portName += "\0"; // Must be a null terminated string

            // Must get the size in bytes. Rememeber .NET strings are formed by 2-byte characters
            uint size = (uint)(portName.Length * 2);

            // Alloc memory in HGlobal to set the portName
            IntPtr portPtr = Marshal.AllocHGlobal((int)size);
            Marshal.Copy(portName.ToCharArray(), 0, portPtr, portName.Length);

            uint needed; // Not that needed in fact...
            uint xcvResult; // Will receive de result here

            XcvData(hPrinter, "AddPort", portPtr, size, IntPtr.Zero, 0, out needed, out xcvResult);

            ClosePrinter(hPrinter);
            Marshal.FreeHGlobal(portPtr);

            return (int)xcvResult;
        }
    }

然后在你的代码中调用Winspool.AddLocalPort(@"C:\MyLocalPortName.txt");

票数 0
EN

Stack Overflow用户

发布于 2019-04-09 20:59:09

您可以使用Printing_Admin_Scripts添加打印机端口

代码语言:javascript
运行
复制
cd c:\windows\system32\printing_admin_scripts\en-us\

cscript prnmngr.vbs -a -p "PrinterName" -m "PrinterDriver" -r "lpt1:"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55592907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档