Click here to Skip to main content
13,596,708 members
Click here to Skip to main content
Add your own
alternative version


12 bookmarked
Posted 7 Nov 2002

WTL Installed Printers List

, 7 Nov 2002
Rate this:
Please Sign up or sign in to vote.
Use this class in your WTL apps to retrieve a list of installed printers

Sample Image - WTLInstalledPrinters.jpg


Want to fetch an array of installed printers for use in your WTL apps? Easy - just use this class.

First, include the header:

#include "installedprinters.h"

Next, simply create a CInstalledPrinters object and the array will be populated automatically. This class is derived from CSimpleArray<CString>, so you can, for example, fill a listbox using the following code:

CListBox listbox = GetDlgItem(IDC_LIST1);
// Get the list of installed printers
CInstalledPrinters list;
// Fill listbox
for (int i = 0; i < list.GetSize(); i++)

It's as easy as that, The class will use the Win32 EnumPrinters API call, using PRINTER_INFO_5 structures - which is probably the fastest way to enumerate printers (no attempt is made to actually open the printer, as this can be slow if you have network printers installed).


#pragma once

#include <atlmisc.h>

class CInstalledPrinters : public CSimpleArray<CString>

    void GetPrinters(void)
        DWORD dwSize = 0;
        DWORD dwPrinters = 0;
        // Enumerate all installed printers
               NULL, 5, NULL, 0, &dwSize, &dwPrinters))
            // Check for ERROR_INSUFFICIENT_BUFFER
            // If something else, then quit
            if (::GetLastError() != ERROR_INSUFFICIENT_BUFFER)
            // Fall through
        // Allocate some buffer memory
        LPBYTE pBuffer = new BYTE [dwSize];
        if (pBuffer == NULL)
        // Fill the buffer
        // Again, this depends on the O/S
              NULL, 5, pBuffer, dwSize, &dwSize, &dwPrinters))
            // Error - unlikely though
            // as first call to EnumPrinters
            // succeeded!
        // Do we have any printers?
        if (dwPrinters == 0)
        // Cast to PRINTER_INFO_2
        PRINTER_INFO_5* pInfo = (PRINTER_INFO_5*)pBuffer;
        // Loop adding the printers to the list
        for (DWORD i = 0; i < dwPrinters; i++, pInfo++)
        delete [] pBuffer;


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

You may also be interested in...

Comments and Discussions

Generalfile atlmisc.h Pin
polunga25-Jan-05 19:35
memberpolunga25-Jan-05 19:35 
GeneralRe: file atlmisc.h Pin
Robert Edward Caldecott25-Jan-05 21:38
memberRobert Edward Caldecott25-Jan-05 21:38 
GeneralNetwork printers Pin
jerko22-Mar-04 2:14
memberjerko22-Mar-04 2:14 
GeneralRe: Network printers Pin
jerko22-Mar-04 3:02
memberjerko22-Mar-04 3:02 
GeneralRe: Network printers Pin
Steve S22-Mar-04 3:03
memberSteve S22-Mar-04 3:03 
GeneralChoosing a printer default from the list Pin
joanne_fredrickson10-Oct-03 2:18
memberjoanne_fredrickson10-Oct-03 2:18 
GeneralRe: Choosing a printer default from the list Pin
moronikos20-Feb-04 11:25
membermoronikos20-Feb-04 11:25 
GeneralRe: Choosing a printer default from the list Pin
chris17520-Feb-06 9:33
memberchris17520-Feb-06 9:33 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web02-2016 | 2.8.180621.3 | Last Updated 8 Nov 2002
Article Copyright 2002 by Rob Caldecott
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid