Что нового

Скриншот окна определенной программы

w3d

Новичок
Сообщения
84
Репутация
3
Как можно снять скриншоты с определенного окна конкретной программы?
Т.е. не снимок всего экрана а только конкретной области?
 
Автор
W

w3d

Новичок
Сообщения
84
Репутация
3
Нашел такой скрипт
AutoIt код:
#NoTrayIcon
#include <ScreenCapture.au3>

Global $iTimeOut = 60000;таймаут в мсек

HotKeySet('{Esc}', '_Exit')
_MyScreen()
AdlibRegister('_MyScreen', $iTimeOut)

While 1
    Sleep(1000)
WEnd

Func _MyScreen()
    Local $s_Dir = @ScriptDir & '\Screen\', $s_FileName, $f_Cursor = False

    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.png', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);имя компьютора
    ;$s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s.jpg', StringReplace(@IPAddress1, '.', '_'), @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC);IP-адрес
    _ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
EndFunc   ;==>_MyScreen

Func _Exit()
    Exit
EndFunc   ;==>_Exit
но не могу понять как его модифицировать под эту задачу
 
Последнее редактирование модератором:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Код:
#include <ScreenCapture.au3>

$hWindow = WinGetHandle(' - SciTE')
_ScreenCapture_CaptureWnd(@DesktopDir & '\Screenshot.png', $hWindow)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
w3d,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

muhiw

Новичок
Сообщения
8
Репутация
0
Прошу помощи, встроить данную функцию в мой скрипт
AutoIt код:
#NoTrayIcon
#include <ScreenCapture.au3>

Global $iTimeOut = 60000;таймаут в мсек

HotKeySet('{Esc}', '_Exit')
_MyScreen()
AdlibRegister('_MyScreen', $iTimeOut)

While 1
    Sleep(1000)
WEnd

Func _MyScreen()
    Local $s_Dir = @ScriptDir & '\Screen\', $s_FileName, $f_Cursor = False
    ; снимок с изменением размеров
    Local $hBmp = _ScreenCapture_Capture("", 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
    _GDIPlus_Startup()
    Local $hImg = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
    _WinAPI_DeleteObject($hBmp)
    Local $hRes = _GDIPlus_ImageResize($hImg, 1280, 720) ; уменьшение до 800х600 с искажением пропорций
    ; Local $hRes = _GDIPlus_ImageScale($hImg, 0.5, 0.5) ; уменьшение в два раза с сохранением пропорций
    _GDIPlus_ImageDispose($hImg)
    $hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hRes)
    _GDIPlus_ImageDispose($hRes)
    _GDIPlus_Shutdown()
    ; сохранение с переименованием
    If Not FileExists($s_Dir) Then DirCreate($s_Dir)
    $s_FileName = StringFormat('%s_%s_%s_%s_%s_%s_%s', @ComputerName, @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC)
    _ScreenCapture_SetJPGQuality(25)
    _ScreenCapture_SaveImage($s_Dir & $s_FileName & ".jpg", $hBmp)
    Sleep(333)
    FileMove($s_Dir & $s_FileName & ".jpg", $s_Dir & $s_FileName & ".hft")
EndFunc   ;==>_MyScreen

Нужно чтобы заместо скриншота всего экрана, делались только в определенных приложениях. Чтобы можно было добавить в список несколько штук. С сохранением функции моего скрипта.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Нужно чтобы заместо скриншота всего экрана, делались только в определенных приложениях
Несколько постов выше, есть пример как это сделать. Вам нужны найти Ваши окна любым доступным способом (прямое имя окна, либо найти по REGEXP), и использовать функцию
Код:
_ScreenCapture_CaptureWnd()
 

muhiw

Новичок
Сообщения
8
Репутация
0
К сожалению я не могу привязать данную функцию конкретно к своему скрипту
 

ZaRaki

Знающий
Сообщения
48
Репутация
19
К сожалению я не могу привязать данную функцию конкретно к своему скрипту
Эт ещё почему?
Если ты не знаешь что дописать, то свою строку:
Код:
Local $hBmp = _ScreenCapture_Capture("", 0, 0, @DesktopWidth,@DesktopHeight, $f_Cursor)

заменяешь на:
Код:
Local $hWnd = wingethandle("[ACTIVE]")
Local $hBmp = _ScreenCapture_CaptureWnd("",$hWnd, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)

Где в $hWnd указываешь нужное тебе окно приложения.
 

muhiw

Новичок
Сообщения
8
Репутация
0
Кто подскажет железный способ привязки к определенной программа, например к Google Chrome.
 
Верх