DOCUMENT:Q176400 07-NOV-1997 [vbwin] TITLE :HOWTO: Print the WebBrowser Control PRODUCT :Microsoft Visual Basic for Windows PROD/VER:WINDOWS:4.0,5.0 OPER/SYS:WINDOWS KEYWORDS:vb432 VB4WIN vb5all vb5howto ====================================================================== --------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual Basic Control Creation, Learning, Professional, and Enterprise Editions for Windows, version 5.0 - Microsoft Visual Basic Standard, Professional, and Enterprise Editions, 32-bit only, for Windows, version 4.0 --------------------------------------------------------------------- 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. In order to print the contents of the WebBrowser Control, focus must be set 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" 'Control-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 the Print button. REFERENCES ========== For additional information, please see the following articles in the Microsoft Knowledge Base: ARTICLE-ID: Q162719 TITLE : HOWTO: Use the WebBrowser Control from Visual Basic 5.0 ARTICLE-ID: Q155969 TITLE : HOWTO: Distribute the WebBrowser Control ====================================================================== Keywords : vb432 VB4WIN vb5all vb5howto Version : WINDOWS:4.0,5.0 Platform : WINDOWS Issue type : kbhowto ============================================================================= 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. Copyright Microsoft Corporation 1997.