Привязка скрипта к конкретному окну с использованием относительных координат.

Аватара пользователя
Nobodykillme
Сообщения: 4
Зарегистрирован: 20 апр 2022, 12:10
Благодарил (а): 5 раз

Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение Nobodykillme »

Подскажите, пожалуйста, как правильно привязать скрипт к конкретному окну. Я так понял Handle при перезапуске окна меняется. А титул, выбранный через psclick не находится. Суть в том что можно запустить несколько окон с одинаковым названием игры. и отличаться будет только в конце приписка [1], [2] и т.д. Так же не нашёл в psClick относительных координат, есть ли в кликере работа с ними, и где их взять?

Аватара пользователя
cirus
Expert
Сообщения: 56
Зарегистрирован: 12 июн 2021, 17:53
Поблагодарили: 8 раз

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение cirus »

А титул, выбранный через psclick не находится.

Если в имени окна есть спец. символы, то при поиске их нужно экранировать, поставьте \ перед такими символами.

Wake up, Neo, select all

$h = Find-Window -Title "NewWindow\[1\]" # найти окно
if(!$h){ # если окно не найдено
Write-Host "Окно не найдено" -ForegroundColor Red
Stop-Script # остановить скрипт
}
$h.handle[0]

есть ли в кликере работа с ними, и где их взять?

Есть. Start-Psclick

Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение Fors1k »

Nobodykillme писал(а): 20 апр 2022, 13:53

Так же не нашёл в psClick относительных координат, есть ли в кликере работа с ними, и где их взять?

Посмотрите по ссылке, которую привел cirus, внизу "Памятка по координатам".
У программы есть родительское окно(в том примере сам калькулятор), и дочерние(в примере окошко с выводом результата).

Nobodykillme писал(а): 20 апр 2022, 13:53

Подскажите, пожалуйста, как правильно привязать скрипт к конкретному окну. Я так понял Handle при перезапуске окна меняется. А титул, выбранный через psclick не находится.

Так же, как в примере из ссылки выше, титул для поиска окна самой программы берите из раздела "Родительское окно".
Если выполняете поиск по полному названию окна, то можете использовать параметр поиска "-EQ" для точного совпадения.
Например, для поиска данного окна браузера, в котором открыт этот топик:

Wake up, Neo, select all

$title = "Привязка скрипта к конкретному окну с использованием относительных координат. - psClick — Яндекс.Браузер"
Find-Window -Title $title -Option EQ

Титул дочернего окна "Chrome Legacy Window" использовать не нужно.

Можно выполнять поиск по части имени:

Wake up, Neo, select all

$title = "psClick — Яндекс.Браузер"
Find-Window -Title $title

Но тогда, как и сказал cirus, не забывайте экранировать спец символы, если они имеются.
Символы, нуждающиеся в экранировании, смотрите в операторе соответствия -match Operators

Аватара пользователя
Nobodykillme
Сообщения: 4
Зарегистрирован: 20 апр 2022, 12:10
Благодарил (а): 5 раз

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение Nobodykillme »

Спасибо за ответы. Спец. символы решили проблему. ;) Окно нашлось. Попробовал отправить на бота скриншоты с перекрытого окна, не получилось. Там только режим "-Screen" доступен? Хотелось бы не весь экран скринить, а только это окно или вообще заданную область. И название скриншотам давать по типу "Дата_время".

Последний раз редактировалось Nobodykillme 20 апр 2022, 17:27, всего редактировалось 2 раза.
Аватара пользователя
cirus
Expert
Сообщения: 56
Зарегистрирован: 12 июн 2021, 17:53
Поблагодарили: 8 раз

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение cirus »

Хотелось бы не весь экран скринить, а только это окно или вообще заданную область. И название скриншотам давать по типу "Дата_время".

Wake up, Neo, select all

Clear-Host
$h = Find-Window -Title "PowerShell" # найти окно с указанным именем
if(!$h){ # если окно не найдено
Write-Host "Окно не найдено" -ForegroundColor Red
Stop-Script # остановить скрипт
}

$screen = Get-Image -Handle $h.handle[0] -StartPos 100, 50 -EndPos 400, 300 # скрин части окна
Write-Host "Ширина: $($screen.Width)"
Write-Host "Высота: $($screen.Height)"
$date = Get-Date -Format "dd.MM.yyyy_HH.mm.ss" # получить текущую дату и время в указанном формате
$screen.Save("$home\Desktop\$date.bmp") # сохранить скрин на рабочий стол
$screen.Dispose() # удалить изображение
Аватара пользователя
Nobodykillme
Сообщения: 4
Зарегистрирован: 20 апр 2022, 12:10
Благодарил (а): 5 раз

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение Nobodykillme »

cirus писал(а): 21 апр 2022, 03:18

Хотелось бы не весь экран скринить, а только это окно или вообще заданную область. И название скриншотам давать по типу "Дата_время".

Wake up, Neo, select all

Clear-Host
$h = Find-Window -Title "PowerShell" # найти окно с указанным именем
if(!$h){ # если окно не найдено
Write-Host "Окно не найдено" -ForegroundColor Red
Stop-Script # остановить скрипт
}

$screen = Get-Image -Handle $h.handle[0] -StartPos 100, 50 -EndPos 400, 300 # скрин части окна
Write-Host "Ширина: $($screen.Width)"
Write-Host "Высота: $($screen.Height)"
$date = Get-Date -Format "dd.MM.yyyy_HH.mm.ss" # получить текущую дату и время в указанном формате
$screen.Save("$home\Desktop\$date.bmp") # сохранить скрин на рабочий стол
$screen.Dispose() # удалить изображение

Почему то скринит чёрный экран. Пробовал убрать область скрина, сделать полностью скрин, думал может с координатами что-то. Нет- весь скрин чёрный. При этом привязка к окну работает, потому что я применяю перемещение и изменение размера окна в начале скрипта, чтобы потом относительные координаты всегда точно работали.

Аватара пользователя
cirus
Expert
Сообщения: 56
Зарегистрирован: 12 июн 2021, 17:53
Поблагодарили: 8 раз

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение cirus »

Почему то скринит чёрный экран.

В Win10 такое бывает. Иногда помогает запуск приложения в режиме совместимости Win7.
Если делаете скрин с браузера или эмулятора андройд, то попробуйте другие.

Аватара пользователя
Nobodykillme
Сообщения: 4
Зарегистрирован: 20 апр 2022, 12:10
Благодарил (а): 5 раз

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение Nobodykillme »

cirus писал(а): 21 апр 2022, 11:10

Почему то скринит чёрный экран.

В Win10 такое бывает. Иногда помогает запуск приложения в режиме совместимости Win7.
Если делаете скрин с браузера или эмулятора андройд, то попробуйте другие.

Игра вроде как мобильная, но у них есть свой лаунчер для пк версии. Возможно он тоже устроен как эмулятор. :?

Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение Fors1k »

Nobodykillme писал(а): 20 апр 2022, 16:51

Там только режим "-Screen" доступен?

Кроме "-Screen" возможных параметров еще много =)
Get-Image

Nobodykillme писал(а): 21 апр 2022, 09:07

Почему то скринит чёрный экран.

В таком случае нужно делать снимок окна, когда оно не перекрыто. Или можете написать в скрипте вывод окна на передний план, делать его снимок, потом возвращать обратно. Не все приложения позволяют делать снимок перекрытого окна.

Аватара пользователя
Nobodykillme
Сообщения: 4
Зарегистрирован: 20 апр 2022, 12:10
Благодарил (а): 5 раз

Re: Привязка скрипта к конкретному окну с использованием относительных координат.

Сообщение Nobodykillme »

Fors1k писал(а): 21 апр 2022, 14:22
Nobodykillme писал(а): 20 апр 2022, 16:51

Там только режим "-Screen" доступен?

Кроме "-Screen" возможных параметров еще много =)
Get-Image

Nobodykillme писал(а): 21 апр 2022, 09:07

Почему то скринит чёрный экран.

В таком случае нужно делать снимок окна, когда оно не перекрыто. Или можете написать в скрипте вывод окна на передний план, делать его снимок, потом возвращать обратно. Не все приложения позволяют делать снимок перекрытого окна.

Я про прямые команды отправки в tg. Похоже нет такой функции. Только если сохранять сначала на комп, а потом подгружать файлом в tg, но тут у меня возникла проблема - как то криво сохраняется файл один и тот же почему то. Как будто застряло изображение в буфере, хотя в конце есть команда по очистке ($screen.Dispose() # удалить изображение). А ещё откуда то вылезает на изображение кусок окна powershell`a. хотя я его убираю в другую сторону вообще. :x

В целом код выглядит так:

Wake up, Neo, select all

$screen = Get-Image -Handle $h.handle[0]
Write-Host "Ширина: $($screen.Width)"
Write-Host "Высота: $($screen.Height)"
$date = Get-Date -Format "dd.MM.yyyy_HH.mm.ss" # получить текущую дату и время в указанном формате
$screen.Save("C:\Users\Egor\Pictures\Screenshots\$date.bmp") # сохранить скрин
$screen.Dispose() # удалить изображение
Send-TelegramFile "C:\Users\Egor\Pictures\Screenshots\$date.bmp" # отправить его в тг
Stop-Script
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя