2

私はc#で次のようなことをしたいです:

  • 「デバイスとプリンター」に移動します
  • プリンタを右クリックします
  • [ポート]タブに移動します
  • COM12:ポートを選択します
  • [OK]をクリックします

名前付きプリンターのManagementObjectを取得し、次のコマンドを呼び出そうとしました。

mObj.SetPropertyValue( "PortName"、 "COM12:");

そのプリンタのManagementObjectで-Whchは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 に答える