VBA网络浏览器捕获全屏

VBA网络浏览器捕获全屏,vba,internet-explorer-8,excel,browser,Vba,Internet Explorer 8,Excel,Browser,希望在VBA的范围内执行此操作(其他用户没有其他可修改的开发工具)。我知道第三方应用程序(例如iMacro)也有类似的功能,但希望尽可能通用。商店使用XP和Excel 2003 (1)VBA子例程控制InternetExplorer浏览器以自动查看网站、表单提交等 (2)有没有办法从网络浏览器的内容中获取屏幕截图?没有杂乱的SendKeys方法。NET有一个Webbrowser.DrawToBitmap方法,但找不到VBA的简单解决方案。想要整个屏幕,包括滚动条下方的“折叠下方”…经过尝试和测试

希望在VBA的范围内执行此操作(其他用户没有其他可修改的开发工具)。我知道第三方应用程序(例如iMacro)也有类似的功能,但希望尽可能通用。商店使用XP和Excel 2003

(1)VBA子例程控制InternetExplorer浏览器以自动查看网站、表单提交等

(2)有没有办法从网络浏览器的内容中获取屏幕截图?没有杂乱的SendKeys方法。NET有一个Webbrowser.DrawToBitmap方法,但找不到VBA的简单解决方案。想要整个屏幕,包括滚动条下方的“折叠下方”…

经过尝试和测试(将完整代码粘贴到模块中并运行子示例()

代码逻辑

1)此代码将打开IE

2)导航到Google.com

3)最大化IE

4)拍摄快照

5)启动MSPaint

6)在MSPaint中粘贴

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 IE As Object
    Dim hwnd As Long, IECaption As String

    Set IE = CreateObject("InternetExplorer.Application")

    IE.Visible = True

    IE.Navigate "www.Google.com"

    Sleep 5000

    '~~> Get the caption of IE
    IECaption = "Google - Windows Internet Explorer"

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

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

    DoEvents

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

    '~~> Start Paint
    Shell "C:\Windows\System32\mspaint.exe", vbNormalFocus

    Sleep 3000

    '~~> Paste snapshot in paint
    keybd_event VK_LCONTROL, 0, 0, 0
    keybd_event VK_V, 0, 0, 0
    keybd_event VK_V, 0, KEYEVENTF_KEYUP, 0
    keybd_event VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0
End Sub


PDF有什么用?如果是这样的话,你可以打印。是的,可以使用API进行打印,但有点复杂。在我的测试中,不仅可以获得网页,还可以获得滚动条,但这是一个开始。谢谢。是的,很遗憾,您将获得整个屏幕的快照。这就像在最大化IE后按
PRINTSCREEN
。您可能需要提高屏幕分辨率以使那些滚动条消失:)+1个精彩答案!虽然说实话,我现在正在从我的生活中清除谷歌的所有东西。。。那么,
keybd\u事件
只是支持
PrntScrn
SendKeys
的替代方案吗?(哪个
SendKeys
没有)它也有同样的弱点吗?@Jean-FrançoisCorbett:很抱歉,我没有看到编辑:)两者最常见的弱点是向目标应用程序发送密钥需要目标应用程序处于活动状态。我在上面的帖子中也看到了一个小错误,我已经改正了
Dim objIe As Object
Set objIe = CreateObject("internetexplorer.application")
    With objIe
        .Navigate "www.google.com"
        '// Set offline JIC user NOT Online
        .offline = True
        '// Maximise the Ie window if not Already Max
        .Visible = True
        '// This routine used to Maximise Ie
        ShowWindow objIe.hwnd, SW_MAXIMIZE
        SetForegroundWindow objIe.hwnd
    End With
Public Const SW_MAXIMIZE As Long = 3       'Show window Maximised
Public Const SW_MINIMIZE As Long = 1       'Show window Minimized

Public Declare Function ShowWindow _
    Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal nCmdShow As Long) _
As Long

Public Declare Function SetForegroundWindow _
    Lib "user32" ( _
    ByVal hwnd As Long) _
As Long