4

助けが必要な問題があります。現在のプロジェクトでは、バッチ プロット アプリケーションを作成する必要があります。このアプリケーションには、印刷する必要がある約 2000 の AutoCAD 図面があります。

アプリケーションには、A4 から A0 までのフォーマットごとに 1 つずつ、合計 5 つのプリンターが必要です。これまでのところまだ問題はありません。

これで、なんらかの問題なしに 2000 の図面を同時にキューに入れることができないことがわかりました。私はオンラインで調査を行い、現在のプリンター キューを確認する方法を見つけました。PrintServerと PrintQueueを使用します。

ここから問題が始まります。まず、必要なネットワーク プリンターが見つかりません。プリンタは、ネットワーク アドレス 192.168.0.14 (\vps01w2k8) にあります。

MSDN のガイドに従ってください。

    PrintServer m_PrintServer = new PrintServer(@"\\vps01w2k8");
    PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues();

    foreach (m_PrintQueueCollection 内の PrintQueue キュー)
    {
         cbPrinters.Items.Add(queue.Name.ToString());
    }

これは私にプリンターを与えません。LocalPrintServer (またはパラメーターが渡されていない PrintServer のみ) を試しています。ネットワークプリンターではなく、ローカルプリンターを(明らかに)提供します。

私の次のステップは、インストールされているすべてのプリンターを見つける方法を見つけることusing System.Drawing.Printing;でしusing System.Printing;た。

    foreach (System.Drawing.Printing.PrinterSettings.InstalledPrinters の文字列プリンター)
    {
         cbPrinters.Items.Add(printer.ToString());
    }

この単純なコードにより、ネットワークに接続されたものを含め、私が持っているすべてのプリンターが得られます。ただし、現在、.NET 2.0 と 3.0 (およびそれ以降) の間で立ち往生しています。クラス PrinterSettings および PrintServer/PrintQueue には接続がありません。

最後に、 WMI アプローチを使用してプリンター キューにアクセスしようとしました。結果が得られた Win32_PrintJob をクエリします。残念ながら、これらの結果を取得するために 10 秒間のロックアップが発生しました。

私はアイデアがありません。PrintServer がネットワーク接続されたプリンターを適切に返すための修正を探しているか、PrinterSettings クラスを使用してバッチ プロットするための同様の手法を実行するための提案を探しています。

前もって感謝します、

ジョーディ

4

1 に答える 1

13

それを見つけた。GetPrintQueues を呼び出すときは、EnumeratedPrintQueueTypes の配列を渡す必要があります。ローカル プリンターとネットワーク プリンターの両方 (インストールされているすべてのプリンター) が返されるようになりました。

PrintServer m_PrintServer = new PrintServer();
PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
于 2011-07-21T06:07:34.613 に答える