Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сделать скриншот скрытого окна?

Ответить
Настройки темы
[решено] Как сделать скриншот скрытого окна?

Аватара для centaurvv

Новый участник


Сообщения: 24
Благодарности: 3

Профиль | Отправить 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

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


по моему, можно подвинуть окно за пределы экрана (координаты окна превосходящие разрешение монитора) и сделать снимок по хендлу. проверь, может поможет

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:08, 11-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить 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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 11-03-2011 в 19:11.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:00, 11-03-2011 | #3


Аватара для centaurvv

Новый участник


Сообщения: 24
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата kaster:
по моему, можно подвинуть окно за пределы экрана »
к сожалению не проходит такой вариант... хотя идея"улыбает" своей простотой

Цитата Creat0R:
Сделай так просто, как возможно, но не проще этого »
Как всегда все работает безупречно! Спасибо!
Осталось разобраться в работе кода... WinAPI+DLL пока немного сложны для понимания

Отправлено: 16:26, 13-03-2011 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата centaurvv:
к сожалению не проходит такой вариант »
Цитата centaurvv:
Как всегда все работает безупречно! »
Этот вариант используется в моём коде

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:40, 13-03-2011 | #5


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата centaurvv:
к сожалению не проходит такой вариант... хотя идея"улыбает" своей простотой »
Цитата Creat0R:
Этот вариант используется в моём коде »
centaurvv,

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 00:55, 14-03-2011 | #6


Аватара для centaurvv

Новый участник


Сообщения: 24
Благодарности: 3

Профиль | Отправить PM | Цитировать


я пробовал подвинуть окно за пределы экрана в своем коде - результат не удовлетворил, по поводу кода Creat0R я уже писал , что далек от WinAPI+DLL.
Тогда спасибо обоим за помощь

Отправлено: 05:14, 14-03-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сделать скриншот скрытого окна?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Как сделать скриншот контекстного меню? 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




 
Переход