How to Obtain & Change the Paper Bins for the Default Printer

Last reviewed: June 21, 1995
Article ID: Q96797
The information in this article applies to:

- Standard and Professional Editions of Microsoft Visual Basic for

  Windows, versions 2.0 and 3.0

SUMMARY

By using the Windows API Escape() function, an application can change the paper bin on the printer and obtain a list of available paper bins for the default printer.

To return a list of paper bin names and a list of corresponding of bin numbers, pass the ENUMPAPERBINS printer escape constant to the Escape() function. You can use the first list to display the available paper bins for the user, and use the second list to change the paper bin.

To change the paper bin, pass the GETSETPAPERBINS printer escape constant along with the bin number to the Escape() function. GETSETPAPERBINS returns the current bin and the number of bins supported by the default printer.

MORE INFORMATION

The example code listed below demonstrates how to use both ENUMPAPERBINS and GETSETPAPERBINS with the Windows API Escape() function.

An Important Note

The Windows API Escape() function is provided in Windows versions 3.0 and 3.1 for backward compatibility with earlier versions of Microsoft Windows. Applications are supposed to use the GDI DeviceCapabilities() and ExtDeviceMode() functions instead of the Escape() function, but neither DeviceCapabilities() nor ExtDeviceMode() can be called directly from Visual Basic. This is because they are exported by the printer driver, not by the Windows GDI. The only way to use ExtDeviceMode() or DeviceCapabilities() in Visual Basic is to create a DLL and call them from there.

Step-by-Step Example

  1. Start Visual Basic or from the File menu, choose New Project (ALT, F, N) if Visual Basic is already running. Form1 is created by default.

  2. From the File menu, choose New Module (ALT, F, M). Module1 is created by default.

  3. Add the following code to the general declarations section of Module1:

    Global Const MaxBins = 6

       Type PaperBin         ' Used for EnumPaperBins
          BinList(1 To MaxBins) As Integer
          PaperNames(1 To MaxBins) As String * 24
       End Type
    
       Type BinInfo                ' Used for GetSetPaperBins
          CurBinNumber As Integer  ' Current Bin
          NumBins As Integer       ' Number of bins supported by printer
          Reserved1 As Integer     ' Reserved
          Reserved2 As Integer     ' Reserved
          Reserved3 As Integer     ' Reserved
          Reserved4 As Integer     ' Reserved
       End Type
       ' Enter each of the following Declare statements on one, single line.
       Declare Function EnumPaperBinEscape% Lib "GDI" Alias "Escape"
          (ByVal hDC%, ByVal nEscape%, ByVal nCount%, NumBins%,
          lpOutData As Any)
       Declare Function GetPaperBinEscape% Lib "GDI" Alias "Escape"
          (ByVal hDC%, ByVal nEscape%, ByVal nCount%, InBinInfo As Any,
          OutBinInfo As Any)
    
       Global Const ENUMPAPERBINS = 31
       Global Const GETSETPAPERBINS = 29
    
    

  4. Add a command button (Command1) to Form1.

  5. Add a list box (List1) to Form1.

  6. Add the following code to the Command1_Click event procedure:

       Sub Command1_Click ()
          Dim InPaperBin As PaperBin
          Dim InBinInfo As BinInfo
          ' Enter each of the following result% statements on one, single line:
          result% = GetPaperBinEscape(Printer.hDC, GETSETPAPERBINS, 0,
             ByVal 0&, InBinInfo)
          result% = EnumPaperBinEscape(Printer.hDC, ENUMPAPERBINS, 2,
             MaxBins, InPaperBin)
    
          List1.Clear
          For I% = 1 To InBinInfo.NumBins ' Fill list1 with available bins
             List1.AddItem InPaperBin.PaperNames(I%)
             List1.ItemData(List1.NewIndex) = InPaperBin.BinList(I%)
          Next I%
    
       End Sub
    
    

  7. Add the following code to the List1_Click event procedure:

       Sub List1_Click ()
          Dim InBinInfo As BinInfo
          Dim NewBinInfo As BinInfo
    
          NewBinInfo.CurBinNumber = List1.ItemData(List1.ListIndex)
          ' Enter the following result% statement on one, single line.
          result% = GetPaperBinEscape(Printer.hDC, GETSETPAPERBINS,
             Len(NewBinInfo), NewBinInfo, NewBinInfo)
    
          MsgBox "Sending Sample Output to printer using Bin: " + List1.Text
          Printer.Print "This should of have come from Bin: "; List1.Text
          Printer.EndDoc
       End Sub
    
    

  8. From the Run menu, choose Start (ALT, R, S) to run the program.

  9. Choose the Command1 button to see a list of available paper bins for the default printer listed in the List1 box.

  10. Select one of the paper bins listed in the List1 box. A message box

        appears to tell you that a sample printout is being sent to the printer
        using the paper bin you selected.
    


Additional reference words: 2.00 3.00
KBCategory: kbprint kbprg kbcode
KBSubcategory: APrgPrint


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: June 21, 1995
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.