2

ネットワーク内のすべてのプリンターを検索しようとしましたが、常に自分のコンピューターに既に接続されているプリンターで終わりました。コントロール パネル\ハードウェアとサウンド\デバイスとプリンターでプリンターを追加しようとすると、ネットワーク上で使用できるプリンターがさらに多く見つかりました。

私はプリンターサーバーを持っていないことに注意してください。すべてのプリンタは IP ベースです。

次のコードを使用しました:

WqlObjectQuery wQuery = new WqlObjectQuery("SELECT * FROM Win32_Printer Where " +
    "Local = FALSE");
ManagementObjectSearcher res = new ManagementObjectSearcher(wQuery);
if ((res.Get().Count > 0))
{
    foreach (ManagementObject printer in res.Get())
    {
        Console.WriteLine(printer["PortName"] + " : " + printer["DriverName"] +
            " : " + printer["Status"]);
    }
}
else { Console.WriteLine("No printers found"); }

クエリで local を true に設定すると、コンピューターにプリンターがインストールされます。

ここでも同様の質問をしてみましたが、まだうまくいきません。

どんな助けでも感謝します。

4

2 に答える 2

2

WMI はネットワーク プリンターを列挙できず、ローカル コンピューターに登録されている共有プリンターのみを一覧表示できます。このタスクには、 WNetEnumResourceWNetOpenEnum、および WNetCloseEnum WinApi 関数を使用できます。少し前に、.Net を使用してこのサンプルを書きました この記事を試してみてくださいEnumerating All Network resources using Delphi Prism、コードはOxygene言語を使用していますが、C# に簡単に変換できます。

于 2013-06-06T17:31:13.060 に答える
2

私の知る限り、あなたが探しているのは WMI の機能の範囲外です。

プリント サーバーがないことは承知していますが、すべてのプリンターが少なくとも他のマシンに接続されている場合、簡単な回避策として、PSExecを使用して、ネットワーク上のすべてのコンピューターでローカルにプリンター検索スクリプトを実行することが考えられます (または、ログイン スクリプト)。単純に、プリンター検索スクリプトをネットワーク共有に書き込み、実行が完了したら情報を確認することができます。

それ以外の場合は、 ZenMapなどのネットワーク マッピング ツールや、Spiceworks (www.spiceworks.com) などのネットワーク監視ツールを使用して、デバイスのフィンガープリントを取得することをお勧めします。

于 2013-06-06T13:49:37.740 に答える