Help and Support
 

powered byLive Search

FIX: Printers Collection May Not Contain All Printers in the Printers Folder

Retired KB ArticleThis article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
Article ID:253612
Last Review:December 12, 2003
Revision:2.0
This article was previously published under Q253612

SYMPTOMS

With Visual Basic 5.0, when you are listing or searching for printers in the Printers collection, you may find that the Printers collection does not contain all the printers in the printers folder.

Back to the top

CAUSE

Visual Basic 5.0 uses the GetProfileString API function to obtain the list of printers. One parameter of GetProfileString is a memory buffer that is allocated to receive the results of the function call. This buffer is then filled in with the list of printers by the operating system (OS). The correct procedure is to first determine how large a buffer is needed and then to supply a buffer of that size. However, Visual Basic 5.0 always allocates a buffer of 1024 bytes. Therefore, if all of the names of all the of the printers shown in the printers folder total more than 1024 characters (including a null character at the end of each printer name), then the Printers collection is missing some printers.

Back to the top

RESOLUTION

The workaround is to call GetProfileString in your Visual Basic code to obtain a separate set of printer names.

Back to the top

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

This problem was corrected in Visual Basic 6.0.

Back to the top

MORE INFORMATION

The Visual Basic Printer object is initially set to the system default printer. Normally, in order to use a printer other than the system default, you just select a printer from the Printers collection. Your application then uses this selected printer and does not affect any other applications. However, if the printer you need is missing from the Printers collection, the only alternative is to change the system default printer so Visual Basic uses that printer. Please see article Q266767 listed in the "References" section for instructions on how to accomplish this.

Note that changing the system default printer may not always be desirable because this will affect all applications that do not specify a printer. For this reason, you may want to set aside the original default printer so that you can restore it once your print job has finished. For example, you can use code such as the following:
Dim OriginalDefault As String
OriginalDefault = Printer.DeviceName
				
Then use the same method as before to restore OriginalDefault as the system default printer.

Back to the top

REFERENCES

For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:
266767 (http://support.microsoft.com/kb/266767/EN-US/) HOWTO: Set Which Printer is the System Default Printer
167735 (http://support.microsoft.com/kb/167735/EN-US/) FIX: Setting Printer to Item in the Printers Collection Fails

Back to the top


APPLIES TO
Microsoft Visual Basic 5.0 Control Creation Edition
Microsoft Visual Basic 5.0 Learning Edition
Microsoft Visual Basic 5.0 Professional Edition
Microsoft Visual Basic 5.0 Enterprise Edition

Back to the top

Keywords: 
kbapi kbbug kbfix kbprint kbvbp600fix KB253612

Back to the top

Article Translations

 

Other Support Options

  • Need More Help?
    Contact a Support professional by E-mail, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.