Je kan je printerqueue gewoon leegmaken via .Net hoor .. Is gewoon een kwestie van in de juiste collection te zoeken.
Het kan er ongeveer zo gaan uitzien: (zoek alle printers en cancel alle jobs)
Private Function ClearAllPrinterQueues() As Boolean
For Each sPrinter As String In GetPrintersCollection()
Console.WriteLine("Printer gevonden: " & sPrinter)
For Each sJob As String In GetPrintJobsCollectionJobId(sPrinter)
CancelPrintJob(sPrinter, CInt(sJob))
Next
Next
End Function
Private Function GetPrintersCollection() As StringCollection
Dim printerNameCollection As New StringCollection()
Dim searchQuery As String = "SELECT * FROM Win32_Printer"
Dim searchPrinters As New ManagementObjectSearcher(searchQuery)
Dim printerCollection As ManagementObjectCollection = searchPrinters.[Get]()
For Each printer As ManagementObject In printerCollection
printerNameCollection.Add(printer.Properties("Name").Value.ToString())
Next
Return printerNameCollection
End Function
Private Function GetPrintJobsCollectionJobId(ByVal printerName As String) As StringCollection
Dim printJobCollection As New StringCollection()
Dim searchQuery As String = "SELECT * FROM Win32_PrintJob"
Dim searchPrintJobs As New ManagementObjectSearcher(searchQuery)
Dim prntJobCollection As ManagementObjectCollection = searchPrintJobs.[Get]()
For Each prntJob As ManagementObject In prntJobCollection
Dim jobName As String = prntJob.Properties("Name").Value.ToString()
Dim splitArr As Char() = New Char(0) {}
splitArr(0) = Convert.ToChar(",")
Dim prnterName As String = jobName.Split(splitArr)(0)
Dim jobId As String = jobName.Split(splitArr)(1)
Dim documentName As String = prntJob.Properties("Document").Value.ToString()
If [String].Compare(prnterName, printerName, True) = 0 Then
Console.WriteLine("- Document gevonden: " & documentName & "( jobId: " & jobId.ToString & ")")
printJobCollection.Add(jobId)
End If
Next
Return printJobCollection
Private Function CancelPrintJob(ByVal printerName As String, ByVal printJobID As Integer) As Boolean
Dim isActionPerformed As Boolean = False
Dim searchQuery As String = "SELECT * FROM Win32_PrintJob"
Dim searchPrintJobs As New ManagementObjectSearcher(searchQuery)
Dim prntJobCollection As ManagementObjectCollection = searchPrintJobs.[Get]()
For Each prntJob As ManagementObject In prntJobCollection
Dim jobName As String = prntJob.Properties("Name").Value.ToString()
Dim splitArr As Char() = New Char(0) {}
splitArr(0) = Convert.ToChar(",")
Dim prnterName As String = jobName.Split(splitArr)(0)
Dim prntJobID As Integer = Convert.ToInt32(jobName.Split(splitArr)(1))
Dim documentName As String = prntJob.Properties("Document").Value.ToString()
If [String].Compare(prnterName, printerName, True) = 0 Then
If prntJobID = printJobID Then
Try
prntJob.Delete()
isActionPerformed = True
Console.WriteLine("--> Job verwijderd: " & printJobID.ToString)
Catch ex As Exception
Console.WriteLine("--> Job NIET verwijderd: " & printJobID.ToString & " [ERROR]: " & ex.Message)
isActionPerformed = False
End Try
Exit For
End If
End If
Next
Return isActionPerformed
End Function
Steek alles in een module en klaar. Makkelijker kan ik het nog maken door mijn solution hier te posten, maar ge moogt zelf ook nog iets doen :d
Grtz & hf