- ベストアンサー
VB2008で0ページの印刷ジョブを削除する方法
- VB2008でプリンターに存在する0ページの印刷ジョブを削除する方法を紹介します。
- VBのPrintSystemJobInfoを使用して指定のプリンターにある0ページの印刷ジョブをキャンセルすることができます。
- プリンタ内に存在する全てのジョブをループさせてキャンセルする方法も解説します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
'デフォルトプリンタ(物理)のケーブルを抜いておき、 'デフォルトプリンタに、他のアプリケーションからいくつかプリンタジョブを登録した。 'これらのプリンタジョブは枚数が異なるので、2枚以上のジョブが消えるか試してみたらうまくいったようだ。 '注意事項。 '個人的には「MS謹製の.NET FrameworkをWindowsでしか動作させない」という発想で最初から割り切るのが好きでないので、Monoでも試そうとしたのだが、System.Printing名前空間のライブラリが添付されていないようで断念せざるを得なかった。 'アプリケーション配布時は実行環境が.NET 3.0以降専用ライブラリを使用していることをエンドユーザに報告する。 'JobSizeってバイトのサイズみたいだけど、NumberOfPagesじゃなくていいの? 'PrinterServerクラスのコンストラクタにNothingを渡すと、ローカルにつながっているプリンタが前提となる、とドキュメントにあるのだが、実際にNew PrinterServer(Nothing)と渡すと、PrintServer(PrintSystemDesiredAccess)もあるのでオーバーロードの解決ができなくなるので、わざわざ文字列型変数にうけているが、何とかならんものかなあ? Option Explicit On Option Strict On Imports System.Drawing.Printing Imports System.Printing Public Class Application Public Shared Sub Main() Dim x As String = Nothing Dim ps As PrintServer = New PrintServer(x) Dim pq As PrintQueue = ps.GetPrintQueue(new PrinterSettings().PrinterName) 'IEnumerableなのでFor Eachで使えるが、もちろん、そうしなければならないということもない。 'Indexで指定するなら、Listのコンストラクタに渡すべきなんだろうか。 For Each job As PrintSystemJobInfo in pq.GetPrintJobInfoCollection() If job.NumberOfPages > 1 Then '条件はお好みでどうぞ。 job.Cancel() End If Next End Sub End Class
お礼
有難うございました。 本題を先に告げずすみませんでした。
補足
himajin100000さん さっそくのご回答有難うございます。 因みに、サーバに印刷ジョブがあり、クライアント側から処理したいのですが Dim x As String = "\\192.168.0.1" 若しくは Dim x As String = "PrintSVR" とやってみたのですが、 PrintQueue オブジェクトのプロパティを作成中に例外が発生しました。 Win32 エラー: プリンター名が無効です。 となりました。この場合、xには何を記述すればいいでしょうか? ご教授くださいますようお願いいたします。