Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I use LocalPrintServer to target a specific printer?

Tags:

c#

printing

queue

Following this question: How do I retrieve a list or number of jobs from a printer queue?

I'm still stuck on how to target a specific printer of which I currently only know the name using the LocalPrintServer class. The application is supposed to print to several machines at once and all printspoolers need to be monitored separately. Can anyone provide me with a code snippet that shows how I can instantiate a LocalPrintServer object using only the name of the printer?

Thanks in advance!

Edit: Added code fragment of solution:

private int GetNumberOfPrintJobs()
{
    LocalPrintServer server = new LocalPrintServer();
    PrintQueueCollection queueCollection = server.GetPrintQueues();
    PrintQueue printQueue = null;

    foreach (PrintQueue pq in queueCollection)
    {
        if (pq.FullName == PrinterName) //PrinterName is a classmember
            printQueue = pq;
    }

    int numberOfJobs = 0;
    if (printQueue != null)
        numberOfJobs = printQueue.NumberOfJobs;

    return numberOfJobs;
}

That wasn't so hard after all!

like image 681
Berry Ligtermoet Avatar asked Apr 13 '11 07:04

Berry Ligtermoet


2 Answers

Important Note: GetPrintQueues doesn't return all printers installed from the user's perspective - just those that are 'owned' by the local server.

More oddly though, LocalPrintServer.DefaultPrintQueue isn't necessarily contained within GetPrintQueues() even though it comes from the LocalPrintServer object.

If you use System.Drawing.Printing.PrinterSettings.InstalledPrinters which is a string[] you'll get a list of all printers installed from the user's perspective.

Some of these may be on remote machines if you've installed a remote printer (on a print server). If it's a networked printer accessible by IP then it will still be a local printer:

"Send To OneNote 2010"  
"Microsoft XPS Document Writer" 
"HP LaserJet P2050 Series PCL6" 
"HP LaserJet 1020"  
"Fax"   
"\\\\ike\\LUCY" 
"\\\\shipping\\HP LaserJet 1020"    

To retrieve a printqueue on a remote server you need to do:

new PrintServer("\\ike").GetPrintQueue("LUCY")

Yes you'll need to parse it out yourself.

like image 198
Simon_Weaver Avatar answered Oct 15 '22 05:10

Simon_Weaver


Try the LocalPrintServer.GetPrintQueue specifying the printer name.

like image 30
Mubashir Khan Avatar answered Oct 15 '22 05:10

Mubashir Khan