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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
VBAで印刷スプール終了の判定をする
Visual Basic(VBA)
-
プリンタの印刷ジョブを削除したい。
Visual Basic(VBA)
-
Excel VBA の印刷後の判定
Excel(エクセル)
-
-
4
VB2008で0ページの印刷ジョブを削除したい
Visual Basic(VBA)
-
5
PDFファイルを開かずに印刷したい
Visual Basic(VBA)
-
6
プログラムからプリンタジョブの削除がしたい
Visual Basic(VBA)
-
7
DataTableに特定のフィールドが存在するかどうか調べるには?
Visual Basic(VBA)
-
8
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
9
印刷要求順番と印刷出力順番が違う。
Visual Basic(VBA)
-
10
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
11
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
12
VB.NETで縦書表示をしたいのですが可能でしょうか。
Visual Basic(VBA)
-
13
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
14
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
15
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
16
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
17
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
18
VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
特定の名前のオートシェイプの...
-
private subモジュールを他のモ...
-
どうやってもFor文を抜けてしま...
-
シェルスクリプトでファイル内...
-
シグナル 6(SIGABRT)とは?
-
マクロで、次のコードへ行く前...
-
vbaのエラー対応(実行時エラー...
-
COBOL OCCURSで指定したデータ...
-
ドリブン??
-
Word VBA。各マクロの間に待ち...
-
VBAでBook読み込み時の非表示方...
-
【Vb.net】プリンタジョブの取得
-
【VBA】エラー処理で別プロシー...
-
ExcelのVBAで、選択したファイ...
-
【C#】Page_Loadさせない方法に...
-
どう増強すべきか
-
Excel VBA セルの名前があるか...
-
変数を使用したFunctionから戻...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
シグナル 6(SIGABRT)とは?
-
private subモジュールを他のモ...
-
特定の名前のオートシェイプの...
-
どう増強すべきか
-
vbaのエラー対応(実行時エラー...
-
マクロで、次のコードへ行く前...
-
どうやってもFor文を抜けてしま...
-
ExcelのVBAで、選択したファイ...
-
エクセル VBAで複数セル選択時...
-
【Vb.net】プリンタジョブの取得
-
Excel VBA セルの名前があるか...
-
特定のファイルを他のプロセス...
-
【C#】Page_Loadさせない方法に...
-
VBA 複数の行を高速で削除する...
-
Functionで戻り値を複数返す方法
-
Word VBA。各マクロの間に待ち...
-
シェルスクリプトでファイル内...
-
StatusStripの表示が更新されな...
おすすめ情報