
プリンタの印刷ジョブを削除したい。
現在、VB.NET(Visual Studio 2008)で開発を行っています。
SetPrinter関数を使用して、印刷ジョブを全て削除したいのですがSetPrinterに失敗してしまいます。
GetLastErrorの戻り値は「5」でアクセス拒否のようです。
SetPrinterの前にOpenPrinterは成功しており、プリンタの印刷ジョブの情報は取得できています。
なお、同環境でVB6.0で同様のプログラムを作成し実行したところジョブの削除ができました。
類似した現象・解決方法等ご存知でしたら教えてください。
開発環境はWindowsXP、Visual Studio 2008です。
以下、ソースの抜粋です。
'宣言
Private Const DEF_INIT_BUFFER_PERFORM As Integer = 100
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const PRINTER_ACCESS_ADMINISTER = &H4
Public Const PRINTER_ACCESS_USE = &H8
Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _
PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
Public Structure PRINTER_DEFAULTS
Public pDatatype As IntPtr
Public pDevMode As IntPtr
Public DesiredAccess As Integer
End Structure
<DllImport("winspool.drv", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function OpenPrinter( _
ByVal pPrinterName As String, _
ByRef hPrinter As IntPtr, _
ByVal pDefault As PRINTER_DEFAULTS _
) As Boolean
End Function
<DllImport("winspool.drv", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function SetPrinter( _
ByVal hPrinter As IntPtr, _
ByVal Level As Long, _
ByVal pDefault As IntPtr, _
ByVal Command As Long _
) As Boolean
End Function
'実行部
Dim pd As New PRINTER_DEFAULTS
pd.DesiredAccess = PRINTER_ALL_ACCESS
Dim printerHandle As IntPtr
Dim ret As Boolean = OpenPrinter("プリンタ名", printerHandle, pd)
Dim err As Integer = Marshal.GetLastWin32Error()
'Falseが返る
ret = SetPrinter(printerHandle, CLng(0), IntPtr.Zero, CLng(3))
'5が返る
err = Marshal.GetLastWin32Error()
No.1ベストアンサー
- 回答日時:
投稿されたコードを見た限りでは。
SetPrinter の宣言が間違っています。
Long 型の変数が使用されている。
その他の部分でも変換忘れがないか確認され、それぞれのAPI 関数の
戻り値を調べ正しい戻り値が返っているか確認して下さい。
エラー値が返っているなら、そのAPIの宣言等を調べ直して下さい。
未確認ですが、VB2008 なら、System.Printing.PrintSystemJobInfo あたりを調べて見たらどうでしょうか?
(私も、手が空いたら試して見る心算ですが)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbaでPDFファイルが印刷されない
-
印刷ダイアログを表示させたくない
-
ACCESSで設定した帳票の用紙サ...
-
PHPでPDFファイルの直接印刷
-
VBAで印刷の成功判定
-
プリンタとジョブのステータス...
-
PDFファイルを印刷し終了するには
-
VBでExcel印刷する時のプリンタ...
-
VBからプリンタに出力する時に...
-
EXCELファイルの複数ダウンロー...
-
JAVAアプレットで画像を印刷し...
-
出力するプリンタを指定したい。
-
2回以上PDFをコピーや印刷がで...
-
VBAでエクセルからワードへの差...
-
ご存知の方がいましたら教えて...
-
.NETプログラムからの印刷
-
VBAでArrayListを使う為の「msc...
-
VBAでIEが起動しているか...
-
意味不明の実行時エラーで困っ...
-
CreateProcessのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷要求順番と印刷出力順番が...
-
印刷ダイアログを表示させない方法
-
PHPでPDFファイルの直接印刷
-
2回以上PDFをコピーや印刷がで...
-
vbaでPDFファイルが印刷されない
-
印刷ダイアログを表示させたくない
-
VBAで印刷の成功判定
-
VB6上から印刷ダイアログを表示...
-
ACCESSで設定した帳票の用紙サ...
-
クリレポのプリンタ設定について
-
オートメーションエラー(214741...
-
プリンターを指定して印刷するには
-
VBでExcel印刷する時のプリンタ...
-
EXCELファイルの複数ダウンロー...
-
VBAで印刷スプール終了の判定を...
-
ActiveReportsを使って[印刷ダ...
-
イベントプロシージャ 印刷が...
-
VB.NET+ActiveReports で印刷...
-
A4の2枚をA3の1枚にする編集方法?
-
VBからプリンタに出力する時に...
おすすめ情報