如何用C#在指定打印机上设置打印机端口

Bak*_*e75 3 c# com ports printers

我希望能够在 C# 中执行与以下操作等效的操作:

  • 进入“设备和打印机”
  • 右键单击打印机
  • 转到端口选项卡
  • 选择COM12:端口
  • 单击“确定”

我已设法获取指定打印机的 ManagementObject 并尝试调用:

mObj.SetPropertyValue("端口名称","COM12:");

在该打印机的 ManagementObject 上 - 继承自 ManagementBaseObject。

然而,这段代码对打印机设置没有任何作用。

我怀疑我需要在适当的库上使用 P/Invoke,但经过大量搜索后,我找不到该库或如何从 C# 执行此操作的教程。

任何帮助将非常感激。

Bak*_*e75 5

在互联网上一个不起眼的地方找到了答案:

public static void SetPrinterPort(string printerName, string portName)
        {
            var oManagementScope = new ManagementScope(ManagementPath.DefaultPath);
            oManagementScope.Connect();

            SelectQuery oSelectQuery = new SelectQuery();
            oSelectQuery.QueryString = @"SELECT * FROM Win32_Printer 
            WHERE Name = '" + printerName.Replace("\\", "\\\\") + "'";

            ManagementObjectSearcher oObjectSearcher =
               new ManagementObjectSearcher(oManagementScope, @oSelectQuery);
            ManagementObjectCollection oObjectCollection = oObjectSearcher.Get();

            foreach (ManagementObject oItem in oObjectCollection)
            {
                oItem.Properties["PortName"].Value = portName;
                oItem.Put();
            }
        }
Run Code Online (Sandbox Code Playgroud)

我非常确定最后一部分是您在任何管理对象上设置属性所需的全部内容。令我抓狂的是,我看到 Win32 API 说我想要设置的属性是读/写的,但似乎没有地方有设置它的代码。

现在我们知道了!:-)

我希望这对某人有用。