Berry Ligtermoet
Berry Ligtermoet

Reputation: 881

How do I use LocalPrintServer to target a specific printer?

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!

Upvotes: 8

Views: 13360

Answers (2)

Simon_Weaver
Simon_Weaver

Reputation: 146110

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.

Upvotes: 11

Mubashir Khan
Mubashir Khan

Reputation: 1494

Try the LocalPrintServer.GetPrintQueue specifying the printer name.

Upvotes: 6

Related Questions