Что нового

Скриншот активной части окна

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
Добрый день, уважаемые мастера autoit.
Помогите решить проблему.

У меня есть скрипт делающий скриншот окна определенной программы - при нажатии на клавишу "W".
Но есть небольшая недоработка.
Этот скрипт - делает скриншот окна целиком, в том числе и заголовок окна и его контур.

Подскажите - как заставить скрипт - делать скриншот - только активной части окна, игнорируя или обрезая заголовок окна и его контура.
Код:
#include <ScreenCapture.au3>
#include <WindowsConstants.au3>
Opt("TrayAutoPause", 0)
Opt("WinTitleMatchMode", -2)
HotKeySet("{ESC}", "_Exit")
HotKeySet("w", "_Screen")
HotKeySet("ц", "_Screen")
OnAutoItExitRegister("_OnExit")
_GDIPlus_Startup()

While 1
    Sleep(10)
WEnd

Func _Screen()
    Local $hWnd = WinGetHandle("Fceux 2")
	 Local Static $i ; <= добавить
    If $hWnd Then
        Local $iW = _WinAPI_GetWindowWidth($hWnd), $iH = _WinAPI_GetWindowHeight($hWnd), $hDC, $hMemDC, $hHBitmap, $hObj, $hBitmap



        $hDC = _WinAPI_GetWindowDC($hWnd)
        $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
        $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
        $hObj = _WinAPI_SelectObject($hMemDC, $hHBitmap)

        _WinAPI_PrintWindow($hWnd, $hMemDC)

        _WinAPI_SelectObject($hMemDC, $hObj)
        _WinAPI_DeleteDC($hMemDC)
        _WinAPI_ReleaseDC($hWnd, $hDC)

        $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBitmap)
        _WinAPI_DeleteObject($hHBitmap)

        $i += 1 ; <= добавить
        _GDIPlus_ImageSaveToFile($hBitmap, @ScriptDir & "\Screen-" & $i & ".jpg") ; <= изменить

        _GDIPlus_BitmapDispose($hBitmap)
    Else
        TrayTip("Screen", "Окно не существует", 10, 3)
    EndIf
EndFunc   ;==>_Screen

Func _OnExit()
    _GDIPlus_Shutdown()
EndFunc   ;==>_OnExit

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 

Вложения

  • 1.rar
    7.4 КБ · Просмотры: 1

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
#include <GdiPlus.au3>
#include <WindowsConstants.au3>

Opt("TrayAutoPause", 0)
Opt("WinTitleMatchMode", -2)

HotKeySet("{ESC}", "_Exit")
HotKeySet("w", "_Screen")
HotKeySet("ц", "_Screen")

While 1
    Sleep(10)
WEnd

Func _Screen()
    Local $hWnd = WinGetHandle("Fceux 2")
    If Not $hWnd Then Return TrayTip("Screen", "Окно не существует", 10, 3)
    Local Static $i
    Local $iW = WinGetClientSize($hWnd)[0], $iH = WinGetClientSize($hWnd)[1], $hDC, $hMemDC, $hHBitmap, $hObj, $hBitmap
    $hDC = _WinAPI_GetDC($hWnd)
    $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
    $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
    $hObj = _WinAPI_SelectObject($hMemDC, $hHBitmap)
    _WinAPI_BitBlt($hMemDC, 0, 0, $iW, $iH, $hDC, 0, 0, $SRCCOPY)
    _WinAPI_SelectObject($hMemDC, $hObj)
    _WinAPI_DeleteDC($hMemDC)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _GDIPlus_Startup()
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBitmap)
    _WinAPI_DeleteObject($hHBitmap)
    $i += 1
    _GDIPlus_ImageSaveToFile($hBitmap, @ScriptDir & "\Screen-" & $i & ".jpg")
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()
EndFunc   ;==>_Screen

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 
Верх