Microsoft KB Archive/176400

From BetaArchive Wiki
Knowledge Base


Article ID: 176400

Article Last Modified on 7/15/2004



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
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition



This article was previously published under Q176400

SUMMARY

Microsoft Internet Explorer 3.0 includes a custom ActiveX control called WebBrowser. The WebBrowser control does not include a Print method that can be directly called from Visual Basic. Tto print the contents of the WebBrowser Control in Visual Basic, you must set the focus to the content portion of the control and a CTRL-P keystroke sequence must be sent to the control.

The difficulty with this is that the WebBrowser window is actually made up of more than one window. The window that needs to have the focus to print is the one with a class name of "HTML_Internet Explorer," and the SetFocus method sets the focus to the "SHELL DocObject View" window. Before sending a CTRL-P keystroke sequence to the WebBrowser control, the proper child window of the control must have the focus.

MORE INFORMATION

To print the control, simply follow the steps below to set focus to the correct window and initiate the SendKeys function:

  1. Start a new standard Exe project in Visual Basic. Form1 is created by default.
  2. Add the "Microsoft Internet Controls" (shdocvw.dll) to the project.
  3. Place the WebBrowser control on the default form (Form1).
  4. Add the following code to load the default page:

          Private Sub Form_Load()
              WebBrowser1.Navigate "http://www.microsoft.com"
          End Sub
                        
  5. Place a CommandButton on the form and change its caption to "Print." Add the following code to the Click event of the button:

          Private Sub Command1_Click()
              Dim hwnd As Long
              WebBrowser1.SetFocus
              hwnd = GetFocus
              SetFocusToBrowser (hwnd)
              SendKeys "^p"   'CTRL+P to print
          End Sub
                        
  6. Add a module to the project, and then add the following code to it:

          Option Explicit
    
          Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
              ByVal wCmd As Long) As Long
    
          Declare Function GetWindowLong Lib "user32" _
              Alias "GetWindowLongA" (ByVal hwnd As Long, _
              ByVal nIndex As Long) As Long
    
          Declare Function SetFocusAPI Lib "user32" _
              Alias "SetFocus" (ByVal hwnd As Long) As Long
    
          Declare Function GetFocus Lib "user32" () As Long
    
          Declare Function SendMessage Lib "user32" _
              Alias "SendMessageA" (ByVal hwnd As Long, _
              ByVal wMsg As Long, ByVal wParam As Long, _
              lParam As Long) As Long
    
          'GetWindow constants
          Public Const GW_CHILD = 5
          'GetWindowLong constants
          Public Const GWL_STYLE = (-16)
          Public Const WS_VSCROLL = &H200000
    
          Sub SetFocusToBrowser(hBrowserHwnd As Long)
              Dim lStyle As Long
              Dim lResult As Long
              Dim hwnd As Long
              hwnd = hBrowserHwnd
              While (lResult = 0) And (hwnd <> 0)
                  hwnd = GetWindow(hwnd, GW_CHILD)
                  lStyle = GetWindowLong(hwnd, GWL_STYLE)
                  lResult = lStyle And WS_VSCROLL
              Wend
              SetFocusAPI (hwnd)
          End Sub
                        
  7. Run the project, and click Print.


REFERENCES

For additional information, please see the following articles in the Microsoft Knowledge Base:

162719 How To Use the WebBrowser Control from Visual Basic 5.0

155969 How To Distribute the WebBrowser Control


Keywords: kbhowto kb32bitonly KB176400