プリンタの印刷ジョブを削除したい。
プリンタの印刷ジョブを削除したい。
現在、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()
お礼
maruru01さん、回答ありがとうございます。 おっしゃる通り、コンパイル後の印刷ではきちんとジョブ名が変わっているのが確認できました。 本当にありがとうございました。