プリンタの印刷ジョブを削除したい。
現在、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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAにて指定したセルをプルダウ...
-
VBからプリンタに出力する時に...
-
プリンタの印刷ジョブを削除し...
-
印刷画面が表示されない
-
ウェブ上の印刷について
-
VBSでExcelファイル印刷時のプ...
-
リンク先のページを印刷したい
-
A4の2枚をA3の1枚にする編集方法?
-
オートメーションエラー(214741...
-
スプレッド(Spread 6) で縮小...
-
ユーザーフォームのテキスト印刷
-
違うフォーマットの宛名印刷
-
2回以上PDFをコピーや印刷がで...
-
プリンターエラーの判定
-
印刷要求順番と印刷出力順番が...
-
VBでExcel印刷する時のプリンタ...
-
ActiveReportsを使って[印刷ダ...
-
VB.NET+ActiveReports で印刷...
-
ACCESSで設定した帳票の用紙サ...
-
Javaを使って、プログラムから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷ダイアログを表示させない方法
-
印刷要求順番と印刷出力順番が...
-
ACCESSで設定した帳票の用紙サ...
-
vbaでPDFファイルが印刷されない
-
プリンターを指定して印刷するには
-
印刷ダイアログを表示させたくない
-
VBAで不特定枚数印刷をしたいで...
-
VBAにて指定したセルをプルダウ...
-
VB.NET+ActiveReports で印刷...
-
ActiveReportsを使って[印刷ダ...
-
VBscriptでPDFファイルを直接印...
-
PDFファイルを印刷し終了するには
-
webページの印刷制限について
-
イベントプロシージャ 印刷が...
-
クリレポのプリンタ設定について
-
両面印刷設定方法について
-
ファイルのパス指定での印刷方法
-
Accessフォームで全レコードを...
-
VBSでExcelファイル印刷時のプ...
-
VBAで印刷スプール終了の判定を...
おすすめ情報