How to automate delayed screen capture/paste procedure using PowerPoint VBA?

2.7k Views Asked by At

I am working on add-in powerpoint the code i had written is taking print screen and copy it to clip board. While i want this copied image to pasted in my powerpoint slide. Also another I am facing is that whenever i click on 'Run' it copy image to clip board without any delay while i want to add timer that it take print screen after 5 seconds when i click 'Run'. The following is the code.

    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
3

There are 3 best solutions below

0
On BEST ANSWER

There should be a line gap while pasting 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
5
On

Your post actually contains 2 questions answered below;

1). In order to paste the captured screenshot image from the clipboard memory to PowerPoint Slide (for e.g. added 1st blank slide ) use the following statement:

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

Read more on this topic in https://social.msdn.microsoft.com/Forums/en-US/006bdb95-1889-4a3a-8eb9-fc7b2af88805/paste-a-picture-from-clipboard-to-slide-how-c

2). In order to add a 5sec delay, use the following statement inserted in the macro of interest:

Application.Wait(Now + TimeValue("00:00:05"))

Alternatively, you can use Sleep(5000) function, but it will require declaration:

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

Hope this will help. Best regards,

0
On

This captures the print screen and paste it to slide.

Sub PrintScreen() 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 ActivePresentation.Slides.Add 1, ppLayoutBlank ActivePresentation.Slides(1).Shapes.Paste End Sub