Автор Тема: Скриншот окна по нажатию клавиши  (Прочитано 569 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн OlegSmirnov [?]

  • Новичок
  • *
  • Сообщений: 47
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt: 3.3.14.2

Описание:
Здравствуйте, уважаемые знатоки autoit.
Помогите с решением вопроса.

Есть программа с текстовым фрагментом в Title :  "Fceux 2"
Как скриптом - при нажатии клавиши "W" - создавать скриншот этого окна и размещать в той же папке, что и скрипт ?

Примечания:

Русское сообщество AutoIt

Скриншот окна по нажатию клавиши
« Отправлен: Октябрь 15, 2017, 22:33:49 »

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #1, Отправлен: Октябрь 15, 2017, 23:17:40 »
Есть программа с текстовым фрагментом в Title :  "Fceux 2"
Как скриптом - при нажатии клавиши "W" - создавать скриншот этого окна и размещать в той же папке, что и скрипт ?

Код: AutoIt [Выделить]
#include <ScreenCapture.au3>
Opt("TrayAutoPause", 0)
Opt("WinTitleMatchMode", -2)
HotKeySet("{ESC}", "_Exit")
HotKeySet("w", "_Screen")

While 1
    Sleep(10)
WEnd

Func _Screen()
    Local $hWnd = WinActive("Fceux 2")
    If $hWnd Then
        _ScreenCapture_CaptureWnd(@ScriptDir & "\Screen.jpg", $hWnd, 0, 0, -1, -1, False)
    Else
        TrayTip("Screen", "Окно не существует или не активно", 5)
    EndIf
EndFunc   ;==>_Screen

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 


Оффлайн OlegSmirnov [?]

  • Новичок
  • *
  • Сообщений: 47

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #2, Отправлен: Октябрь 16, 2017, 11:52:30 »
Tempo, не работает.
Жму на кнопку W - ничего не происходит.

Скриншотов в папке со скриптом - не появляется.

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #3, Отправлен: Октябрь 16, 2017, 12:00:40 »
Tempo, не работает.

Окно активно?

Русское сообщество AutoIt

Re: Скриншот окна по нажатию клавиши
« Ответ #3 Отправлен: Октябрь 16, 2017, 12:00:40 »

Оффлайн OlegSmirnov [?]

  • Новичок
  • *
  • Сообщений: 47

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #4, Отправлен: Октябрь 16, 2017, 12:03:33 »
Tempo, да - окно активно.

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #5, Отправлен: Октябрь 16, 2017, 12:08:29 »
Tempo, да - окно активно.
А в трее нет всплывающей ошибки что окна не сущесвует?

Код: AutoIt [Выделить]
#RequireAdmin
#include <ScreenCapture.au3>
Opt("TrayAutoPause", 0)
Opt("WinTitleMatchMode", -2)
HotKeySet("{ESC}", "_Exit")
HotKeySet("w", "_Screen")

While 1
    Sleep(10)
WEnd

Func _Screen()
    Local $hWnd = WinActive("Fceux 2")
    If $hWnd Then
        _ScreenCapture_CaptureWnd(@ScriptDir & "\Screen.jpg", $hWnd, 0, 0, -1, -1, False)
        ShellExecute(@ScriptDir & "\Screen.jpg")
    Else
        TrayTip("Screen", "Окно не существует или не активно", 10, 3)
    EndIf
EndFunc   ;==>_Screen

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 



Добавлено: Октябрь 16, 2017, 12:15:15
Еще можете попробовать так не будет проверки активно ли окно

(нажмите для показа/скрытия)
« Последнее редактирование: Октябрь 16, 2017, 12:17:11 от Tempo »

Оффлайн OlegSmirnov [?]

  • Новичок
  • *
  • Сообщений: 47

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #6, Отправлен: Октябрь 16, 2017, 12:21:01 »
Tempo , ни первый, ни второй скрипт - не работает.
Никаких ошибок не выдают.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3576
  • Репутация: 945
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #7, Отправлен: Октябрь 16, 2017, 12:26:21 »
OlegSmirnov
Какая у вас в Windows раскладка клавиатуры по умолчанию? Если русская, то замените горячую клавишу "w" на "ц".

Русское сообщество AutoIt

Re: Скриншот окна по нажатию клавиши
« Ответ #7 Отправлен: Октябрь 16, 2017, 12:26:21 »

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #8, Отправлен: Октябрь 16, 2017, 12:36:37 »
Я и забыл

Код: AutoIt [Выделить]
#RequireAdmin
#include <ScreenCapture.au3>
Opt("TrayAutoPause", 0)
Opt("WinTitleMatchMode", -2)
HotKeySet("{ESC}", "_Exit")
HotKeySet("w", "_Screen")
HotKeySet("ц", "_Screen")

While 1
    Sleep(10)
WEnd

Func _Screen()
    Local $hWnd = WinActive("Fceux 2")
    If $hWnd Then
        _ScreenCapture_CaptureWnd(@ScriptDir & "\Screen.jpg", $hWnd, 0, 0, -1, -1, False)
    Else
        TrayTip("Screen", "Окно не существует или не активно", 10, 3)
    EndIf
EndFunc   ;==>_Screen

Func _Exit()
    Exit
EndFunc   ;==>_Exit

 

« Последнее редактирование: Октябрь 16, 2017, 12:44:28 от Tempo »

Оффлайн OlegSmirnov [?]

  • Новичок
  • *
  • Сообщений: 47

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #9, Отправлен: Октябрь 16, 2017, 12:39:41 »
Tempo , а вот теперь стало выдавать сообщение - окна не существует.

( я имел ввиду - не точное название окна, а то что программа имеет текстовый фрагмент в Title :  "Fceux 2" )

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #10, Отправлен: Октябрь 16, 2017, 12:42:03 »
Tempo , а вот теперь стало выдавать сообщение - окна не существует.

( я имел ввиду - не точное название окна, а то что программа имеет текстовый фрагмент в Title :  "Fceux 2" )

В скрипте используется
Код: AutoIt [Выделить]
Opt("WinTitleMatchMode", -2)


Соответствие любой подстроке в заголовке + принудительное сопоставление в нижнем регистре


Добавлено: Октябрь 16, 2017, 12:43:29
Попробуйте так

Код: AutoIt [Выделить]
#RequireAdmin
#include <ScreenCapture.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 $hWnd Then
        _ScreenCapture_CaptureWnd(@ScriptDir & "\Screen.jpg", $hWnd, 0, 0, -1, -1, False)
    Else
        TrayTip("Screen", "Окно не существует", 10, 3)
    EndIf
EndFunc   ;==>_Screen

Func _Exit()
    Exit
EndFunc   ;==>_Exit

 


Оффлайн OlegSmirnov [?]

  • Новичок
  • *
  • Сообщений: 47

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #11, Отправлен: Октябрь 16, 2017, 12:47:18 »
Tempo , подскажите пожалуйста.
При каждом запуске данный скрипт - выдает окно - "Разрешить внесение изменений на данном компьютере...".

Как избавиться от этого сообщения?

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #12, Отправлен: Октябрь 16, 2017, 12:51:05 »
Уберите
Код: AutoIt [Выделить]

Или отключите UAC

Оффлайн OlegSmirnov [?]

  • Новичок
  • *
  • Сообщений: 47

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #13, Отправлен: Октябрь 16, 2017, 12:56:09 »
Tempo, еще такой вопрос.
Во время создания скриншота - все другие окна, которые стоят - поверх этого окна - также попадают в скриншот (например гаджет Windows  - "Часы").

Можно как-то сделать скриншот - только одного окна, без посторонних элементов ?
Или это невозможно ?

Помечен как лучший ответ пользователем OlegSmirnov Отправлен Октябрь 16, 2017, 13:42:59

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Скриншот окна по нажатию клавиши
« Ответ #14, Отправлен: Октябрь 16, 2017, 13:35:44 »
Можно как-то сделать скриншот - только одного окна, без посторонних элементов ?
Или это невозможно ?

Код: AutoIt [Выделить]
#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")
    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)

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

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

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 


Русское сообщество AutoIt

Re: Скриншот окна по нажатию клавиши
« Ответ #14 Отправлен: Октябрь 16, 2017, 13:35:44 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3903 Просмотров
Последний ответ Август 25, 2010, 08:13:32
от Guezt Gutsy
6 Ответов
4001 Просмотров
Последний ответ Февраль 19, 2011, 03:06:19
от Kaster
13 Ответов
4449 Просмотров
Последний ответ Сентябрь 12, 2011, 21:55:32
от Степан
2 Ответов
2384 Просмотров
Последний ответ Май 29, 2012, 19:48:36
от Rymex
13 Ответов
4668 Просмотров
Последний ответ Ноябрь 07, 2012, 19:13:21
от CreatoR
7 Ответов
4466 Просмотров
Последний ответ Сентябрь 18, 2013, 18:05:12
от InnI
8 Ответов
1849 Просмотров
Последний ответ Февраль 17, 2015, 10:57:08
от Ksaan
0 Ответов
741 Просмотров
Последний ответ Март 25, 2015, 17:24:13
от Layan
1 Ответов
809 Просмотров
Последний ответ Ноябрь 24, 2016, 12:46:28
от hedji
6 Ответов
669 Просмотров
Последний ответ Август 14, 2017, 00:18:39
от Alofa