Печатает сценарий нажатия клавиш на экране. ^ {PRTSC} ничего не делает

Я пытаюсь создать пакетный сценарий, который помещает снимок экрана в буфер обмена, чтобы я мог сохранить его в другом приложении.

Я использую ^ {PRTSC} и скопировал код из другого сообщения здесь (я хотел бы спросить / прокомментировать его, но список закрыт, и у меня недостаточно баллов для публикации здесь).

Когда я запускаю следующую строку, я не получаю ошибок:

powershell -c "$wshell = New-Object -ComObject wscript.shell; $wshell.SendKeys("%{PRTSC}")

Но когда я создаю новый документ в Photoshop и выбираю «Вставить» ctrl + v, ничего не вставляется из буфера обмена.

Очевидно, что код не помещает снимок экрана в буфер обмена.

(Я не хочу использовать Navcmd)


person Graham3D    schedule 07.03.2021    source источник
comment
Почему вы используете пакетную обработку? Просто используйте PowerShell напрямую. Существует множество готовых примеров / примеров скриптов по всему миру. web для вашего варианта использования. На сайте MS powershellgallery.com есть даже модули для такого рода вещей. Например, поиск по запросу Find-Module -Name 'capture'. Вы можете вызывать сценарии PowerShell из командного файла. Наконец, при этом будет захвачено окно консоли, из которого вы запустили это, если вы не запустите его свернутым или скрытым с помощью ярлыка, и вы должны немедленно выбрать целевое окно после двойного щелчка.   -  person postanote    schedule 08.03.2021
comment
или, скорее, выполняя эту функцию copy / prtsc, я бы поставил PhotoShopas на объектный модуль, который позволит вам в дальнейшей автоматизации захватывать материалы с экрана и вставлять их в текущее окно PhotoShop с помощью сценариев. Опять же, мне никогда не был нужен PhotoShop ни по какой причине. Итак, нет опыта в автоматизации.   -  person postanote    schedule 08.03.2021
comment
Быстрый поиск в Интернете: 'объектная модель фотошопа'. Первое обращение: Руководство по созданию сценариев Adobe Photoshop CC 2015   -  person postanote    schedule 08.03.2021
comment
В документации сказано, что вы не можете отправлять prtsc.   -  person user14797724    schedule 09.03.2021
comment
См. winsourcecode.blogspot.com/2019/06 /   -  person user14797724    schedule 09.03.2021


Ответы (2)


Вот старый пакетный сценарий, который использует модуль в VB.net и сохраняет снимок экрана как jpeg изображение с системной датой:


/*
@echo off & cls & color FC
Mode 30,3
::Autor Delmar Grande
::http://bbat.forumeiro.com/t248-bat-exe-printscreen-usando-vb-net
::Data  Qui 11 Jul 2013
:: Modified by Hackoo on 09/09/2016 to save image with system date
Title PrintScreen by Delmar Grande and modified by Hackoo
Rem Just adding a little timeout to organise our screenshot
Timeout /T 4 /Nobreak>nul
findstr "'%skip%VB" "%~f0">"%tmp%\%~n0.vb"
for /F %%i in ('dir /B /S ^"%WinDir%\Microsoft.NET\Framework\vbc.exe^"') do set "vbc=%%i"
if /i "%vbc%"=="" cls & color 1c & echo This script needs the framework & pause & Exit
cls
%vbc% /nologo /out:"%tmp%\%~n0.exe" "%tmp%\%~n0.vb"
"%tmp%\%~n0.exe"
del "%tmp%\%~n0.vb" >NUL 2>&1
del "%tmp%\%~n0.exe" >NUL 2>&1
exit
*/
Imports System.Windows.Forms 'VB
Module ModulePrintscreen 'VB
  Sub Main() 'VB
  Dim MaDate As String 'VB
  SendKeys.SendWait("{%}({PRTSC})") 'VB
  If My.Computer.Clipboard.ContainsImage() Then 'VB
  MaDate = Format(Now,"dd-MM-yyyy_hh-mm-ss") 'VB
  My.Computer.Clipboard.GetImage.Save(MaDate & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg) 'VB
  End If 'VB
  End Sub 'VB
End Module 'VB
person Hackoo    schedule 07.03.2021

Насколько мне известно, клавиатура Windows поддерживает два сочетания клавиш для захвата экрана:

  • PrtScn Захватывает весь рабочий стол
  • Alt + PrtScn Захватывает активное окно.

Согласно заголовку и вашему описанию, ^{PRTSC} должен действовать так, как если бы он нажимал Ctrl + PrtScn, что будет выполнять то же действие, что и PrtScn.

Предполагая, что вы просто хотите захватить активное окно, сработает следующая команда из командного файла:

powershell -c "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.SendKeys]::SendWait('%%{PRTSC}')"

Есть несколько отличий:

  • Используя реализацию SendWait из .NET. Реализация COM SendKeys имеет некоторые проблемы, особенно связанные с тем, как она реагирует на окна консоли и специальные клавиши.
  • Я использую одинарные кавычки, чтобы заключить строку внутри команды в кавычки, в противном случае двойные кавычки завершат цитируемую строку, отправляемую в PowerShell.
  • Использование % для имитации клавиши Alt и др., Поскольку она находится в пакетном файле, экранирование % с помощью %%.
person Anon Coward    schedule 07.03.2021
comment
в более новой Windows 10 также есть Win + PrintScreen, который сохраняет снимок экрана напрямую как * .png - person phuclv; 27.03.2021