【问题标题】:How to take screenshot of webpage and paste it in a Word document?如何截取网页截图并将其粘贴到 Word 文档中?
【发布时间】:2017-08-07 16:42:17
【问题描述】:

我正在尝试截取网页的屏幕截图并将其粘贴到 Word 中。以下是编写的代码

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
    Private Const VK_SNAPSHOT As Byte = 44
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Const SW_SHOWMAXIMIZED = 3
    Private Const VK_LCONTROL As Long = &HA2
    Private Const VK_V = &H56
    Private Const KEYEVENTF_KEYUP = &H2
    Sub Sample()
    Dim objIE As InternetExplorerMedium
    Set objIE = New InternetExplorerMedium
objIE.Visible = True
    objIE.navigate "https://staging-site.com/"

    Do
    DoEvents
    Loop Until objIE.readyState = 4

    Dim hwnd As Long, IECaption As String

    '~~> Get the caption of IE
    IECaption = objIE.document.Title

    '~~> Get handle of IE
    hwnd = FindWindow(IECaption, vbNullString)

    If hwnd = 0 Then
    MsgBox "IE Window Not found!"
    Exit Sub
    Else
    '~~> Maximize IE
    ShowWindow hwnd, SW_SHOWMAXIMIZED
    End If
    Sleep 3000
    DoEvents

    '~~> Take a snapshot
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)

Dim SystemDateTime As String

sPath = Environ("USERPROFILE") & "\Desktop"

Set wordobj = CreateObject("Word.Application")

Set objDoc = wordobj.Documents.Add

SystemDateTime = Replace(Replace(Now, "/", ""), ":", "")

objDoc.SaveAs (sPath & "\Student Blue Waiver " & SystemDateTime)

wordobj.Visible = True

Set objSelection = wordobj.Selection

'Paste into Word
objSelection.Paste
objDoc.Save
End Sub

但是即使带有标题的 IE 窗口可见,下面的变量 'hwnd' 总是返回 0

hwnd = FindWindow(IECaption, vbNullString)
If hwnd = 0 Then
MsgBox "IE Window Not found!"
Exit Sub

我认为 IECaption 仅获取可能对具有所需标题的 FindWindow 有问题的窗口标题

【问题讨论】:

  • 认为,或者你知道?如果您调试此代码,您实际观察到 IECaption 值与 IE 浏览器窗口的对比是什么?
  • IECaption 的值为“选择大学”,但是当我将鼠标悬停在 IE 选项卡上时,它显示“选择大学 www.staging-site.com/......”
  • 如果你使用FindWindow 和IE 标签的完整标题会发生什么?您的 IE 是否一次打开了多个选项卡(我认为这会有问题)。
  • 我关闭了所有的IE窗口并尝试了,但变量hwnd仍然返回0
  • 知道如何从 IE 标签中获取完整标题吗?

标签: vba excel


【解决方案1】:

您似乎向FindWindow API 函数传递了错误的参数

第一个参数应该是"IEFrame"第二个参数应该是窗口名称。在您的代码中,您将文档标题作为类名传递,并将空字符串 (vbNullString) 作为窗口名称!

NB 我使用CreateObject 来实例化 InternetExplorer.Application 类。这可能与你的InternetExplorerMedium 略有不同,我不知道。

我也发现必须在caption值后面加上" - Internet Explorer",否则找不到。

Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub foo()
Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
    objIE.navigate "http://cnn.com"

    Do
    DoEvents
    Loop Until objIE.readyState = 4

    Dim hwnd As Long, IECaption As String

    '~~> Get the caption of IE
    IECaption = objIE.Document.Title & " - Internet Explorer"

    '~~> Get handle of IE
    hwnd = FindWindow("IEFrame", IECaption)

    If hwnd = 0 Then
    MsgBox "IE Window Not found!"
    Exit Sub
    Else

【讨论】:

  • 成功了!!谢谢大卫
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多