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

C# 如何在指定的打印机上用C设置打印机端口,c#,com,ports,printers,C#,Com,Ports,Printers,我希望能够在c中执行以下等效操作: 进入设备和打印机 右键单击打印机 转到“端口”选项卡 选择COM12:端口 单击“确定” 我已成功获取命名打印机的ManagementObject,并尝试调用: mObj.SetPropertyValuePortName,COM12: 在该打印机的ManagementObject上-whch继承自ManagementBaseObject 但是,这段代码对打印机设置没有任何影响 我怀疑我需要在适当的库上使用p/Invoke,但是在大量搜索之后,我找不到该库,也找

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

进入设备和打印机 右键单击打印机 转到“端口”选项卡 选择COM12:端口 单击“确定” 我已成功获取命名打印机的ManagementObject,并尝试调用:

mObj.SetPropertyValuePortName,COM12:

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

但是,这段代码对打印机设置没有任何影响

我怀疑我需要在适当的库上使用p/Invoke,但是在大量搜索之后,我找不到该库,也找不到如何从c中执行此操作的教程


如果有任何帮助,我们将不胜感激。

在互联网的一个模糊部分找到了答案:

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

现在我们知道了


我希望这对某些人有用。

在互联网的一个模糊部分找到了答案:

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

现在我们知道了

我希望这对某人有用