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

时间:2012-07-31 04:54:13

标签: c# com ports printers

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

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

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

  

mObj.SetPropertyValue( “PORTNAME”, “COM12:”);

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

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

我怀疑我需要在相应的库上使用P / Invoke,但经过大量搜索后,我无法找到库或者如何从c#中学习这个教程。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

在互联网的一个不起眼的部分找到答案:

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();
            }
        }

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

现在我们知道了! :-)

我希望这对某人有用。