Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как сохранить printScreen в файл / 3 сообщений из 3, страница 1 из 1
02.06.2010, 15:51
    #36664342
Alex9682
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить printScreen в файл
Имеется макрос который работает длительное время. Программа запускается на работе. необходимо вставить в макрос код который будет через определенное время делать снимок экрана и отсылать этот снимок по почте, что бы даже сидя дома можно было видеть на каком этапе происходит обработка.
В связи с этим Первй вопрос - Как сделать снимок экрана и сохранить его в файл?
нашел следующее, но почему то вылетает ошибка:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const VK_SNAPSHOT = &H2C

Sub Command1_Click()
Dim image1 As Variant
keybd_event VK_SNAPSHOT, 1, 0, 0
image1.Picture = Clipboard.GetData(vbCFBitmap) ' на этой строчке возникает ошибка
SavePicture image1.Picture, "D:\ps.bmp"

End Sub

Как быть?
...
Рейтинг: 0 / 0
02.06.2010, 17:16
    #36664701
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить printScreen в файл
Alex9682,

Ошибка возникает потому что VBA не имеет объекта clipboard и Вы нигде не декларируете что-либо на него похожее.

Реализовывать лучше через API типа GetClipBoard и т.п. гугл надеюсь не "зобанеле" :)
...
Рейтинг: 0 / 0
03.06.2010, 11:41
    #36666062
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить printScreen в файл
Alex9682,

Clipboard - Это для VB.
Для VBA можно воспользоваться другим, более длинным, но более перспективным кодом. Он тоже для VB, поэтому придётся "доработать напильником".
1) Открываете статью How To Capture and Print the Screen, a Form, or Any Window .
2) Создаёте в проекте VBA обычный модуль, копируете в него код из пункта 6 статьи до функции CaptureScreen включительно.
3) Убеждаетесь, что в References подключена библиотека типов OLE Automation.
4) В начало модуля, например, после Option Base 0, вставляете
Код: plaintext
1.
2.
3.
4.
5.
      #If VBA6 Then
         Private Const vbPicTypeBitmap As Long =  1 
         Private Const vbSrcCopy As Long = &HCC0020
         Private Const HORZRES As Long =  8 
         Private Const VERTRES As Long =  10 
      #End If
5) Вокруг функции CaptureScreen вставляете:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
   #If VBA6 Then
      Public Function CaptureScreen() As IPictureDisp
         Dim hWndScreen As Long
         Dim hDCScreen As Long
         Dim nWidth As Long, nHeight As Long
         hWndScreen = GetDesktopWindow()
         hDCScreen = GetWindowDC(hWndScreen)
         nWidth = GetDeviceCaps(hDCScreen, HORZRES)
         nHeight = GetDeviceCaps(hDCScreen, VERTRES)
         ReleaseDC hWndScreen, hDCScreen
         Set CaptureScreen = CaptureWindow(hWndScreen, False,  0 ,  0 , _
            nWidth, nHeight)
      End Function
   
   #Else
       сюда переместить уже существующую функцию CaptureScreen
   #End If
5)Нажимаете Ctrl+H и заменяете в модуле все описания As Picture на As IPictureDisp.

В итоге имеете функцию CaptureScreen, которой можно воспользоваться, например, для сохранения скриншота в .bmp-файл:
Код: plaintext
SavePicture CaptureScreen, "C:\Temp\Screenshot.bmp"
Или, воспользовавшись поиском по форуму, в JPEG (например).
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как сохранить printScreen в файл / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]