* VB-CODE (2)
Tip 168: Using the ShellExecute Function to Print Files

December 5, 1995

Abstract
This article explains how to print a file specified by the user of your
Microsoft Visual Basic? application.

Printing a File from Within an Application
The Microsoft? Windows? application programming interface (API)
ShellExecute function can be used from within a Microsoft Visual
Basic? application to print a file. In addition, this function can
be used to load an executable (.EXE) file.

To use the ShellExecute function, you must include the following Declare
statement in your project:

Private Declare Function ShellExecuteAny Lib "shell32.dll" Alias "ShellExecuteA"
   (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String,
   ByVal lpParameters As Any, ByVal lpDirectory As Any, ByVal nShowCmd As Long)
   As Long

The ShellExecute function requires six arguments, as follows:

hWnd          A long value that contains the window's handle.
LpOperation   A string that specifies the operation that the ShellExecute
              function is to perform. This string can be one of three
              values, as follows:
              open     Specifies that the file lpFile is to be opened. In
                       Microsoft Windows 95 this file may be a Windows 95
                       folder.
              print    Specifies that the file lpFile is to be printed.
              explore  Explores the folder for lpFile in Windows 95.
LpFile        A string containing the name of the file to open, print, or
              explore.
LpParameters  Set to NULL if lpFile specifies a document file. If lpFile
              specifies an executable file, then lpParameters is a pointer
              to a string specifying the parameters that should be passed
              to the application.
LpDirectory   A string specifying the default directory's name.
NShowCmd      If a document file is specified in lpFile, this should be
              set to zero. If an executable file is specified in lpFile,
              this determines how the ShellExecute function displays the
              application after it is loaded. The following values may be
              used:
              SW_HIDE	Hides the window and activates the executable file.
              SW_MAXIMIZE         Maximizes the window.
              SW_MINIMIZE         Minimizes the window. The next top-level
                                  window in the z-order is activated.
              SW_RESTORE          Activates the window even if it is hidden
                                  or minimized.
              SW_SHOW             Activates the window and displays it in
                                  its original size and at its original
                                  position.
              SW_SHOWMAXIMIZED    Activates the window. The window is
                                  displayed as maximized.
              SW_SHOWMINIMIZED    Activates the window. The window is
                                  displayed as minimized.
              SW_SHOWMINNOACTIVE  Activates the window as minimized. The
                                  active window retains the focus.
              SW_SHOWNA           Activates the window in its current
                                  state but the active window retains
                                  the focus.
              SW_SHOWNOACTIVATE   Displays the window in its most recent
                                  size and in its most recent position.
                                  The active window retains the focus.
              SW_SHOWNORMAL       Displays the window in its original size
                                  and at its original position.

In the example program below, you retrieve the name of the file you want
to print from the Text Box control. Then you call the ShellExecute function
with the lpFile argument set to "print". Notice that for demonstration
purposes, you set the nShowCmd argument to SW_SHOWMINNOACTIVE. This
argument lets you print the file to the printer without actually having
to make the program receive the focus. The actual application that prints
the document appears in a minimized window.

Example Program
This program shows how to use the ShellExecute function to print a
Microsoft Word document. The function can also print regular text files,
such as those created by the Windows 95 Notepad application.

 1. Create a new project in Visual Basic. Form1 is created by default.
 2. Add the following Constant and Declare statements to the General
    Declarations section of Form1 (note that the Declare statement must
    be typed as a single line of code):

Private Declare Function ShellExecuteAny Lib "shell32.dll" Alias "ShellExecuteA"
   (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String,
   ByVal lpParameters As Any, ByVal lpDirectory As Any, ByVal nShowCmd As Long)
   As Long
Const SW_SHOWMINNOACTIVE = 7

 3. Add the following code to the Form_Load event for Form1:

Private Sub Form_Load()
    Text1.Text = ""
End Sub

 4. Add a Text Box control to Form1. Text1 is created by default.
 5. Add a Command Button control to Form1. Command1 is created by default.
    Set its Caption property to "Print".
 6. Add the following code to the Click event for Command1 (note that the
    "Ret =" statement must be typed as a single line of code):

Private Sub Command1_Click()
    Dim Ret As Long
    Dim FileToPrint As String

    FileToPrint = Text1.Text
    Ret = ShellExecuteAny(Me.hwnd, "print", FileToPrint, ByVal 0&, ByVal 0&,
       SW_SHOWMINNOACTIVE)
End Sub

Run the example program by pressing F5. Type the name of a Microsoft Word
document or text file you want to print in the Text Box control. Click the
Print command button to run the application that originally created the
document or text file. Notice that this application remains loaded in the
background, minimized, while it sends the file to the printer.


Return