如何使用PowerPoint VBA自动执行延迟屏幕捕获/粘贴过程?

如何使用PowerPoint VBA自动执行延迟屏幕捕获/粘贴过程?,vba,powerpoint,screenshot,copy-paste,powerpoint-2010,Vba,Powerpoint,Screenshot,Copy Paste,Powerpoint 2010,我正在制作外接程序powerpoint。我编写的代码正在打印屏幕并将其复制到剪贴板。我希望将复制的图像粘贴到powerpoint幻灯片中。另外,我面临的另一个问题是,每当我点击“运行”时,它会毫不延迟地将图像复制到剪贴板上,而我想添加计时器,当我点击“运行”时,它会在5秒后进入打印屏幕。下面是代码 Option Explicit Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _ bSc

我正在制作外接程序powerpoint。我编写的代码正在打印屏幕并将其复制到剪贴板。我希望将复制的图像粘贴到powerpoint幻灯片中。另外,我面临的另一个问题是,每当我点击“运行”时,它会毫不延迟地将图像复制到剪贴板上,而我想添加计时器,当我点击“运行”时,它会在5秒后进入打印屏幕。下面是代码

    Option Explicit

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 Function GetVersionExA Lib "kernel32" _
      (lpVersionInformation As OSVERSIONINFO) As Integer

Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12

Dim blnAboveVer4 As Boolean

Private Sub Command1_Click()
    If blnAboveVer4 Then
        keybd_event VK_SNAPSHOT, 0, 0, 0
    Else
        keybd_event VK_SNAPSHOT, 1, 0, 0
    End If
End Sub

Private Sub Command2_Click()
    If blnAboveVer4 Then
        keybd_event VK_SNAPSHOT, 1, 0, 0
    Else
        keybd_event VK_MENU, 0, 0, 0
        keybd_event VK_SNAPSHOT, 0, 0, 0
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
        keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
    End If
End Sub

你的帖子实际上包含下面回答的两个问题

1) 。要将捕获的屏幕截图图像从剪贴板内存粘贴到PowerPoint幻灯片(例如,添加的第一张空白幻灯片),请使用以下语句:

ActivePresentation.Slides.Add 1, ppLayoutBlank
ActivePresentation.Slides(1).Shapes.Paste
请在中阅读有关此主题的更多信息

2) 。要添加5秒延迟,请在相关宏中插入以下语句:

Application.Wait(Now + TimeValue("00:00:05"))
或者,您可以使用
Sleep(5000)
函数,但它需要声明:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

希望这会有所帮助。致以最诚挚的问候,

这将捕获打印屏幕并将其粘贴到幻灯片上

子打印屏幕()
keybd_事件VK_菜单,0,0,0
keybd_事件VK_快照,0,0,0
keybd_事件VK_快照,0,KEYEVENTF_KEYUP,0
keybd_事件VK_菜单,0,KEYEVENTF_KEYUP,0
ActivePresentation.Slides.Add 1,ppLayoutBlank
ActivePresentation.Slides(1).Shapes.Paste

结束子项

粘贴acivepresentation时应存在行间距

Sub PrintScreen()
    keybd_event VK_MENU, 0, 0, 0
    keybd_event VK_SNAPSHOT, 0, 0, 0
    keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 
    keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0

    ActivePresentation.Slides.Add 1, ppLayoutBlank
    ActivePresentation.Slides(1).Shapes.Paste

End Sub

我不能发布图像,否则我会向图像展示它是如何工作的。你的问题是什么?PPT对象模型中没有Application.Wait,但是调用Sleep可以正常工作。感谢你的回答:我已经重写了代码,它将图像从剪辑板复制到PPT幻灯片,但是Sleep调用无法正常工作,下面是代码。Sub PrintScreen()睡眠(5000)keybd_事件VK_菜单,0,0,0 keybd_事件VK_快照,0,0,0 keybd_事件VK_快照,0,KEYEVENTF_KEYUP,0 keybd_事件VK_菜单,0,KEYEVENTF_KEYUP,0 ActivePresentation.Slides.Add 1,ppLayoutBlank ActivePresentation.Slides(1).Shapes.Paste SubActually我想在这5秒钟内转到其他窗口并捕获该屏幕截图,即想在5秒钟后拍摄打印屏幕,无论该窗口当时处于打开状态或最大化状态(浏览器、ppt或文件夹)。关于Paste,还有一些附加信息,以备将来开发时需要:。祝你的项目好运。顺致敬意,