|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сделать скриншот скрытого окна? |
|
[решено] Как сделать скриншот скрытого окна?
|
Новый участник Сообщения: 24 |
Профиль | Отправить PM | Цитировать Собственно, тема раскрывает основной вопрос. Скриншот видимого окна сделать возможно, а скрытого... думаю тоже, но как это сделать (кроме варианта сделать его видимым на долю секунды для снимка)?
В подтверждение добавлю такой пример: #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <IE.au3> #Include <ScreenCapture.au3> $oIE = _IECreateEmbedded () $hGui = GUICreate("", 1000, 500,-1, -1) GUICtrlCreateObj($oIE, 0, 0, 990, 490) _IENavigate ($oIE, 'http://www.mail.ru') GUISetState() ;Окно открыто _ScreenCapture_CaptureWnd (@DesktopDir & "\Окно_не_скрыто.jpg", $hGui) ;Делаю скриншот и сохраняю на рабочий стол "Окно_не_скрыто.jpg" GUISetState(@SW_HIDE) ;Скрываю окно _ScreenCapture_CaptureWnd (@DesktopDir & "\Окно_скрыто.jpg", $hGui) ;Делаю скриншот и сохраняю на рабочий стол "Окно_скрыто.jpg" GUISetState() While GUIGetMsg() <> $GUI_EVENT_CLOSE WEnd |
|
Отправлено: 15:05, 11-03-2011 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать по моему, можно подвинуть окно за пределы экрана (координаты окна превосходящие разрешение монитора) и сделать снимок по хендлу. проверь, может поможет
|
------- Отправлено: 16:08, 11-03-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать #include <IE.au3> #include <WinAPI.au3> #Include <ScreenCapture.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $oIE = _IECreateEmbedded() $hGui = GUICreate("", 1000, 500,-1, -1) GUICtrlCreateObj($oIE, 0, 0, 990, 490) _IENavigate($oIE, 'http://www.mail.ru') GUISetState() ;Окно открыто _ScreenCapture_CaptureBackgrWnd(@DesktopDir & "\Окно_не_скрыто.jpg", $hGui) ;Делаю скриншот и сохраняю на рабочий стол "Окно_не_скрыто.jpg" GUISetState(@SW_HIDE) ;Скрываю окно _ScreenCapture_CaptureBackgrWnd(@DesktopDir & "\Окно_скрыто.jpg", $hGui) ;Делаю скриншот и сохраняю на рабочий стол "Окно_скрыто.jpg" GUISetState() While GUIGetMsg() <> $GUI_EVENT_CLOSE WEnd Func _ScreenCapture_CaptureBackgrWnd($sFileName, $hWnd, $iWidth = -1, $iHeight = -1) Local $iOpt_WWD, $hActive, $aPos, $iH, $iW, $hDDC, $hCDC, $hBMP If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) If Not BitAND(WinGetState($hWnd), 2) Then $iOpt_WWD = Opt("WinWaitDelay", 0) $hActive = WinGetHandle("[ACTIVE]") $aPos = WinGetPos($hWnd) WinMove($hWnd, "", -1500, -1500) WinSetState($hWnd, "", @SW_SHOW) WinActivate($hActive) WinWaitActive($hActive) Opt("WinWaitDelay", $iOpt_WWD) ElseIf BitAND(WinGetState($hWnd), 16) Then $iOpt_WWD = Opt("WinWaitDelay", 0) $hActive = WinGetHandle("[ACTIVE]") WinSetState($hWnd, "", @SW_RESTORE) WinActivate($hActive) WinWaitActive($hActive) Opt("WinWaitDelay", $iOpt_WWD) EndIf If $iWidth = -1 Then $iWidth = _WinAPI_GetWindowWidth($hWnd) If $iHeight = -1 Then $iHeight = _WinAPI_GetWindowHeight($hWnd) $hDDC = _WinAPI_GetDC($hWnd) $hCDC = _WinAPI_CreateCompatibleDC($hDDC) $hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight) _WinAPI_SelectObject($hCDC, $hBMP) DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "hwnd", $hCDC, "int", 0) _WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, 0, 0, 0x00330008) _WinAPI_ReleaseDC($hWnd, $hDDC) _WinAPI_DeleteDC($hCDC) If IsArray($aPos) Then WinMove($hWnd, "", $aPos[0], $aPos[1]) WinSetState($hWnd, "", @SW_HIDE) ElseIf IsHWnd($hActive) Then WinSetState($hWnd, "", @SW_MINIMIZE) EndIf If $sFileName = "" Then Return $hBMP _ScreenCapture_SaveImage($sFileName, $hBMP, True) EndFunc |
------- Последний раз редактировалось Creat0R, 11-03-2011 в 19:11. Отправлено: 19:00, 11-03-2011 | #3 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Цитата kaster:
Цитата Creat0R:
Осталось разобраться в работе кода... WinAPI+DLL пока немного сложны для понимания |
||
Отправлено: 16:26, 13-03-2011 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
|
------- Отправлено: 23:40, 13-03-2011 | #5 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 00:55, 14-03-2011 | #6 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать я пробовал подвинуть окно за пределы экрана в своем коде - результат не удовлетворил, по поводу кода Creat0R я уже писал , что далек от WinAPI+DLL.
Тогда спасибо обоим за помощь |
Отправлено: 05:14, 14-03-2011 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - [решено] Как сделать скриншот контекстного меню? | studentandr | Microsoft Windows 2000/XP | 8 | 23-04-2014 10:04 | |
Как сделать скриншот. | Ser6720 | Хочу все знать | 108 | 20-09-2012 10:40 | |
как сделать скриншот того, что не умещается на экран? | illusionmgs | Хочу все знать | 10 | 06-04-2010 11:47 | |
Интерфейс - [решено] сделать скриншот | severagent007 | Microsoft Windows 2000/XP | 7 | 12-10-2009 20:41 | |
[решено] Как сделать скриншот? Сложный компьютер... | Werewolf6 | Microsoft Windows 95/98/Me (архив) | 5 | 28-06-2007 10:44 |
|