如何使用PowerPoint VBA自动执行延迟屏幕捕获/粘贴过程?
我正在制作外接程序powerpoint。我编写的代码正在打印屏幕并将其复制到剪贴板。我希望将复制的图像粘贴到powerpoint幻灯片中。另外,我面临的另一个问题是,每当我点击“运行”时,它会毫不延迟地将图像复制到剪贴板上,而我想添加计时器,当我点击“运行”时,它会在5秒后进入打印屏幕。下面是代码如何使用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
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,还有一些附加信息,以备将来开发时需要:。祝你的项目好运。顺致敬意,