Marek Slahor
May 17th, 2001, 10:03 AM
Hi gurus!
I need to purge printer queue programatically. I'm running VB6 on NT4.0. In MSDN is described API function SetPrinter(...) using which it should work, but doesn't. It returns 0 (which means error). Then after calling GetLastError() return value is 0 (which means no error).
YEAH I KNOW THIS IS MYSTIFICAL SITUATION, BUT THANKS MICRO$OFT WE MEET SIMILAR PROBLEMS ALMOST EVERY DAY ;O(
This is piece of code which I wrote (I found on web few similar codes, but they does'n work for me too). Please try to find what's wrong:
private Const PRINTER_CONTROL_PURGE = 3
private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (byval pPrinterName as string, phPrinter as Long, byval pDefault as Long) as Long
private Declare Function ClosePrinter Lib "winspool.drv" (byval hPrinter as Long) as Long
private Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (byval hPrinter as Long, byval Level as Long, pPrinter as Byte, byval Command as Long) as Long
private Declare Function GetLastError Lib "kernel32" () as Long
private Sub cmdCancelJobsInQueue_Click()
Dim objPrinterTemp as Printer
Dim hPrinter as Long
Dim strPrinterName as string
Dim lngResult as Long
' find name of printer which "sits" on defined port
for Each objPrinterTemp In Printers
If Trim(UCase(objPrinterTemp.Port)) = Trim(UCase("com1:")) then
strPrinterName = objPrinterTemp.DeviceName
set objPrinterTemp = nothing
Exit for
End If
next
' open printer
lngResult = OpenPrinter(strPrinterName, hPrinter, byval 0)
' cancel print jobs
lngResult = SetPrinter(hPrinter, 0, vbNull, PRINTER_CONTROL_PURGE)
If Not lngResult then
MsgBox "SetPrinter returned 0. That means there was an error"
lngResult = GetLastError
MsgBox "GetLastError returned: " & lngResult
End If
' close printer
lngResult = ClosePrinter(hPrinter)
End Sub
Thanks a lot...!!!
Best regards
Marek Slahor
I need to purge printer queue programatically. I'm running VB6 on NT4.0. In MSDN is described API function SetPrinter(...) using which it should work, but doesn't. It returns 0 (which means error). Then after calling GetLastError() return value is 0 (which means no error).
YEAH I KNOW THIS IS MYSTIFICAL SITUATION, BUT THANKS MICRO$OFT WE MEET SIMILAR PROBLEMS ALMOST EVERY DAY ;O(
This is piece of code which I wrote (I found on web few similar codes, but they does'n work for me too). Please try to find what's wrong:
private Const PRINTER_CONTROL_PURGE = 3
private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (byval pPrinterName as string, phPrinter as Long, byval pDefault as Long) as Long
private Declare Function ClosePrinter Lib "winspool.drv" (byval hPrinter as Long) as Long
private Declare Function SetPrinter Lib "winspool.drv" Alias "SetPrinterA" (byval hPrinter as Long, byval Level as Long, pPrinter as Byte, byval Command as Long) as Long
private Declare Function GetLastError Lib "kernel32" () as Long
private Sub cmdCancelJobsInQueue_Click()
Dim objPrinterTemp as Printer
Dim hPrinter as Long
Dim strPrinterName as string
Dim lngResult as Long
' find name of printer which "sits" on defined port
for Each objPrinterTemp In Printers
If Trim(UCase(objPrinterTemp.Port)) = Trim(UCase("com1:")) then
strPrinterName = objPrinterTemp.DeviceName
set objPrinterTemp = nothing
Exit for
End If
next
' open printer
lngResult = OpenPrinter(strPrinterName, hPrinter, byval 0)
' cancel print jobs
lngResult = SetPrinter(hPrinter, 0, vbNull, PRINTER_CONTROL_PURGE)
If Not lngResult then
MsgBox "SetPrinter returned 0. That means there was an error"
lngResult = GetLastError
MsgBox "GetLastError returned: " & lngResult
End If
' close printer
lngResult = ClosePrinter(hPrinter)
End Sub
Thanks a lot...!!!
Best regards
Marek Slahor