http://jehupc.exblog.jp/8603528/
上記のページを参考にさせて頂きvb.netにて、印刷処理を実行し、印刷ジョブを監視するプログラムを作成しました。
印刷処理を実行した時、印刷は実行されるのですが、どうも印刷の処理自体が早く、プリンタジョブを取得する前にジョブが終了してしまっているようです。
ジョブを監視しようにも、ジョブが既に消えてしまっているので、監視しているループから抜けだせません。
(ジョブが溜まっているときは上手くジョブを取得出来るのでプログラムの処理自体は問題ないと思います。)
どうにか、消えてしまう前にジョブを取得できないでしょうか?
下記が該当のプログラムです。
処理自体はバックグラウンド処理でファイルの個数分ループしています。
--------------------------------------------------------------------------------------
'印刷処理
ShellExecute(IntPtr.Zero, "print", 【ファイルパス】, "", "", 0)
'プリントサーバの情報取得
Dim prtSv As New LocalPrintServer()
'印刷キュー取得
Dim que As PrintQueue = prtSv.DefaultPrintQueue
'処理フラグ T:正常 F:異常
Dim blnRtn As Boolean = True
'ジョブ番号
Dim intJobNum As Integer
'ループ内での時間カウント
Dim intCnt As Integer = 0
'下記のループで待つ時間をミリ秒単位で指定
Dim intWatiMiliTime As Integer = 10
'印刷がキューに入るまで待つ。
While True
'指定ミリ秒待つ
Threading.Thread.Sleep(intWatiMiliTime)
intCnt += intWatiMiliTime
'1分以上たっていたら、印刷に問題があったことにして処理異常フラグを立てる
If intCnt > 60000 Then
blnRtn = False
Exit While
End If
'キューが1つ以上
If que.NumberOfJobs > 0 Then
Dim jobList As New List(Of PrintSystemJobInfo)()
'印刷ジョブコレクション取得
For Each ps As PrintSystemJobInfo In que.GetPrintJobInfoCollection
jobList.Add(ps)
Next
'最新ジョブ名に印刷ファイル名が含まれるとき、このプログラムから印刷キューに入れたと判断する。
If jobList(jobList.Count - 1).Name.EndsWith(【ファイルパス】, True, Nothing) Then
intJobNum = jobList(jobList.Count - 1).JobIdentifier
Exit While
End If
End If
End While
intCnt = 0
'指定されたジョブが印刷完了するまで待つ
While blnRtn
'指定ミリ秒待つ
Threading.Thread.Sleep(intWatiMiliTime)
intCnt += intWatiMiliTime
Dim jobNow As PrintSystemJobInfo
Try
jobNow = que.GetJob(intJobNum)
Catch ex As Exception
'(すでに印刷が完了してジョブが破棄されたとき対策)
'異常フラグ立てループ終了
blnRtn = False
End Try
If jobNow.JobStatus = PrintJobStatus.Completed _
OrElse jobNow.JobStatus = PrintJobStatus.Deleted _
OrElse jobNow.JobStatus = PrintJobStatus.Deleting _
OrElse jobNow.JobStatus = PrintJobStatus.Printed _
OrElse jobNow.JobStatus = PrintJobStatus.Printing _
OrElse jobNow.JobStatus = PrintJobStatus.Retained Then
'ループ終了
Exit While
End If
'ジョブがなんらかのエラか、タイムアウト(1分)したなら処理異常終了
If jobNow.JobStatus = PrintJobStatus.Error _
OrElse jobNow.JobStatus = PrintJobStatus.Offline _
OrElse jobNow.JobStatus = PrintJobStatus.PaperOut _
OrElse jobNow.JobStatus = PrintJobStatus.UserIntervention _
OrElse intCnt > 60000 Then
'異常フラグ立てループ終了
blnRtn = False
End If
End While
No.3ベストアンサー
- 回答日時:
『続き』のことに触れられていなかったので、見落としているのかな?
と思いレスしただけです。
VB.Net ・・さっぱり分かりません。
あの『続き』のなかで、
http://msdn.microsoft.com/ja-jp/library/aa970685 …
が紹介されていますが、各Queueを個別にRefreshせんとダメっぽいですね。
タイミングとしては、While の直後か End While の直前ではないですかね?
何分サッパリわかりませんので・・・
No.2
- 回答日時:
質問者さんが参考にされたサイトには、下の方に続きがありますけど・・・。
追記:この方法ではジョブやキューの状態取得に問題があることが判明しました。
詳しくは(VB.Net)[補足2].NetからのPDFファイル印刷方法を参照。
http://jehupc.exblog.jp/8650821/
ご回答ありがとうございます。
該当のページは既に見させていただいてました。
記事中のRefresh()を試してみたのですが、いまいちどこに入れていいか分からず、入れて実行してもRefresh()でエラーが発生してしまいました。
何か解決策はありますでしょうか?
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルの印刷マクロについて質問があります。 現在、下記のマクロで印刷しています。Sheet1のD6 5 2023/06/12 10:59
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
VBAで印刷スプール終了の判定をする
Visual Basic(VBA)
-
印刷要求順番と印刷出力順番が違う。
Visual Basic(VBA)
-
プリンタの印刷ジョブを削除したい。
Visual Basic(VBA)
-
-
4
Excel VBA の印刷後の判定
Excel(エクセル)
-
5
プログラムからプリンタジョブの削除がしたい
Visual Basic(VBA)
-
6
プリンタのスプール設定について
プリンタ・スキャナー
-
7
PDFファイルを印刷し終了するには
Visual Basic(VBA)
-
8
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
9
VB.NETでのDOSコマンドを実行について
Visual Basic(VBA)
-
10
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
11
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
12
プリンタの状態を取得したいです
C言語・C++・C#
-
13
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
14
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
15
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
16
VB.NETでファイル名順にファイルを読む方法
Visual Basic(VBA)
-
17
VB.NET でのLaod/unLoad について
Visual Basic(VBA)
-
18
htmlでテーブル内にテキストボックスを作りたいのですが・・・
HTML・CSS
-
19
PDFファイルを開かずに印刷したい
Visual Basic(VBA)
-
20
VB2008で0ページの印刷ジョブを削除したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
シグナル 6(SIGABRT)とは?
-
特定の名前のオートシェイプの...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
マクロで、次のコードへ行く前...
-
Functionで戻り値を複数返す方法
-
フォルダのアクセス権確認について
-
ListViewから選択中の文字列を取得
-
VBA For Each 〜 複数条件について
-
VB6にてネットワーク上にある共...
-
【VBA】エラー処理で別プロシー...
-
cobolのコントロールブレイク
-
VBA 複数の行を高速で削除する...
-
どう増強すべきか
-
VCでビープ音を鳴らし続ける
-
VBAでBook読み込み時の非表示方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
特定の名前のオートシェイプの...
-
vbaのエラー対応(実行時エラー...
-
iPhoneのニューラルエンジンっ...
-
マクロで、次のコードへ行く前...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
Excel VBA セルの名前があるか...
-
Functionで戻り値を複数返す方法
-
特定のファイルを他のプロセス...
-
シグナル 6(SIGABRT)とは?
-
【VBA】エラー処理で別プロシー...
-
エクセル VBAで複数セル選択時...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
シェルスクリプトでファイル内...
-
VBA 複数の行を高速で削除する...
-
【Vb.net】プリンタジョブの取得
おすすめ情報