
プリンターの印刷ジョブを確認すると、N/Aとなっている印刷ジョブが存在します。
実際には0ページなのですが、必要があって保留状態でスプールに蓄積しています。
これを、VBのPrintSystemJobInfoを使ってキャンセルできないかと考えたのですが
指定のプリンターにある0ページの印刷ジョブをどうやってキャンセルしていいかわかりません。
Public Property JobSize As Integer
'使用
Dim instance As PrintSystemJobInfo
Dim value As Integer
value = instance.JobSize
if value = 0 then
instance.cancel
end if
とやればできそうなのですが、プリンタ内にある全てのジョブで
やるには、どのようにループさせればいいのでしょうか?
No.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には何を記述すればいいでしょうか?
ご教授くださいますようお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
印刷ダイアログを表示させたくない
-
vbaでPDFファイルが印刷されない
-
両面印刷設定方法について
-
実行時に、フォームを印刷
-
EXCELファイルの複数ダウンロー...
-
HPの背景画像や背景色が印刷時...
-
印刷要求順番と印刷出力順番が...
-
プリンターを指定して印刷するには
-
A4の2枚をA3の1枚にする編集方法?
-
プログラムからプリンタジョブ...
-
VBAで印刷スプール終了の判定を...
-
C++Builder5で画像データを用紙...
-
リンク先のページを印刷したい
-
VBからHITACHI EURを使うには...
-
端末によって印刷されたフォー...
-
印刷ダイアログを表示させない方法
-
2回以上PDFをコピーや印刷がで...
-
VB6でのピクチャボックスの...
-
VB6からのエクセルの印刷品...
-
意味不明の実行時エラーで困っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷ダイアログを表示させない方法
-
vbaでPDFファイルが印刷されない
-
印刷ダイアログを表示させたくない
-
PHPでPDFファイルの直接印刷
-
2回以上PDFをコピーや印刷がで...
-
オートメーションエラー(214741...
-
印刷要求順番と印刷出力順番が...
-
リンク先のページを印刷したい
-
EXCELファイルの複数ダウンロー...
-
VBAで印刷の成功判定
-
プリンターを指定して印刷するには
-
VBからプリンタに出力する時に...
-
ActiveReportsを使って[印刷ダ...
-
VBAで印刷スプール終了の判定を...
-
ACCESSで設定した帳票の用紙サ...
-
VBscriptでPDFファイルを直接印...
-
VBSでExcelファイル印刷時のプ...
-
VBAで不特定枚数印刷をしたいで...
-
VBAにて指定したセルをプルダウ...
-
A4の2枚をA3の1枚にする編集方法?
おすすめ情報