Dictionary<string, int> GetAllPrinterQueues()
{
RaiseLog("Getting print queue counts");
Dictionary<string, int> TempDict =new Dictionary<string, int>();
PrintServer myPrintServer =new PrintServer(); // Get all the printers installed on this PC
// List the print server's queues
PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
String printQueueNames ="My Print Queues:\n\n";
foreach (PrintQueue pq in myPrintQueues)
{
Saint.StCommon.Wait((decimal)2000); // 2 seconds of "Application.DoEvents(), not thread sleep
if (GotPingBack(pq.Name))
{
int PGcount =0;
try
{
if (pq.NumberOfJobs >0)
{
// We know there are jobs. So we *have* to be able to get the collection at some point
DateTime Bailout = DateTime.Now.AddSeconds(10); // Keep trying for 10 seconds or until I get a valid response
string ErrMsg ="notyetretreived";
while (Bailout > DateTime.Now && ErrMsg !=string.Empty)
{
try
{
var Jobs = pq.GetPrintJobInfoCollection();
Saint.StCommon.Wait((int)2);
foreach (PrintSystemJobInfo Job in Jobs)
{
PGcount += Job.NumberOfPages;
ErrMsg =string.Empty;
}
}
catch (Exception k)
{
ErrMsg = k.Message;
Console.WriteLine(string.Format("{0}: {1}", pq.Name, k.Message));
}
}
}
}
catch
{
Console.WriteLine("Exception dork");
}
Console.WriteLine(string.Format("{2}\t{0}\t{1}", pq.Name, PGcount, DateTime.Now.ToString("HH:mm:ss.fff")));
TempDict.Add(pq.Name, PGcount);
}
}
return TempDict;
}
publicbool CancelPrintJob(int printJobID)
{
// Variable declarations.
bool isActionPerformed =false;
string searchQuery;
String jobName;
char[] splitArr;
int prntJobID;
ManagementObjectSearcher searchPrintJobs;
ManagementObjectCollection prntJobCollection;
try
{
// Query to get all the queued printer jobs.
searchQuery ="SELECT * FROM Win32_PrintJob";
// Create an object using the above query.
searchPrintJobs =new ManagementObjectSearcher(searchQuery);
// Fire the query to get the collection of the printer jobs.
prntJobCollection = searchPrintJobs.Get();
// Look for the job you want to delete/cancel.
foreach (ManagementObject prntJob in prntJobCollection)
{
jobName = prntJob.Properties["Name"].Value.ToString();
// Job name would be of the format [Printer name], [Job ID]
splitArr =newchar[1];
splitArr[0] = Convert.ToChar(",");
// Get the job ID.
prntJobID = Convert.ToInt32(jobName.Split(splitArr)[1]);
// If the Job Id equals the input job Id, then cancel the job.
if (prntJobID == printJobID)
{
// Performs a action similar to the cancel
// operation of windows print console
prntJob.Delete();
isActionPerformed =true;
break;
}
}
return isActionPerformed;
}
catch (Exception sysException)
{
// Log the exception.
returnfalse;
}
}