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;
}
public bool 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 =
new
char[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.
return
false;
}
}