2

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

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

我设法为命名打印机获取了一个 ManagementObject 并尝试调用:

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

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

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

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

任何帮助将非常感激。

4

1 回答 1

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 说我想设置的属性是读/写的,但似乎没有任何地方有设置它的代码,这让我发疯了。

那么现在我们知道了!:-)

我希望这对某人有用。

于 2012-08-01T22:04:29.943 回答