Страница 1 из 1

Полезные советы

Добавлено: 11 авг 2021, 23:56
Fors1k

Как держать всегда под рукой любимые скрипты

Video


Re: Полезные советы

Добавлено: 12 авг 2021, 17:37
Madeus

Курсор из ла2 топ)


Re: Полезные советы

Добавлено: 12 авг 2021, 23:30
Fors1k

Это да, уже лет 10 на нём))


Re: Полезные советы

Добавлено: 16 авг 2021, 02:48
Fors1k

Как передать большое количество параметров в команду одной "пачкой" (PowerShell Splatting)



Так будет выглядеть вызов команды поиска цвета, записанный обычным способом

Wake up, Neo, select all

$color = New-Color (53, 121, 185)
$handle = (Get-Process -id $pid).MainWindowHandle

$pos = Find-Color -Color $color -Handle $handle -StartPos 0, 0 -Size 100, 100 -Deviation 12 -Count 1
$pos.location

А сейчас зададим параметры отдельно, используя powershell Splatting:

Wake up, Neo, select all

$find = @{
Color = New-Color (53, 121, 185)
Handle = (Get-Process -id $pid).MainWindowHandle
StartPos = 0, 0
Size = 100, 100
Deviation = 12
Count = 1
}

Теперь вызов команды будет выглядеть очень лаконично

Wake up, Neo, select all

$pos = Find-Color @find
$pos.location

При таком способе весьма читабельно выглядит декларирование параметров.
Также будет удобно вызывать команду с разными наборами параметров несколько раз.
Можно в начале скрипта задать несколько
наборов параметров $find1 = @{...} ; $find2 = @{...},
и затем в нужном месте вызывать команду, указывая определенный
набор параметров Find-Color @find1 ; Find-Color @find2


Re: Полезные советы

Добавлено: 17 авг 2021, 18:58
Fors1k

Как быстро создать строку, например, из 10 символов


Wake up, Neo, select all

"#" * 10

Re: Полезные советы

Добавлено: 23 авг 2021, 11:53
Fors1k

Операторы & и .



Оператор . запускает ScriptBlock в текущей области, в то время как оператор & запускает ScriptBlock в дочерней области.

Wake up, Neo, select all

.{
$var1 = "test"
}

&{
$var2 = "test"
}

Write-Host "var1 = $var1"
Write-Host "var2 = $var2"

Output


var1 = test
var2 =

Re: Полезные советы

Добавлено: 07 окт 2021, 16:27
Fors1k

Найти файл по его содержимому



Есть папка с кучей текстовых файлов, и нам понадобилось найти один из них.
Все, что мы о нем помним - где-то в тексте присутствует слово "gold".

Как найти "иголку в стоге сена"? Решить эту задачу через PowerShell нам поможет всего одна строка кода.
Укажем путь, фильтр по типу файлов, и что будем искать, а в результат выберем
путь к файлу, и номер строки, где обнаружилось совпадение:

Wake up, Neo, select all

Select-String "gold" "D:\files\*.txt"|Select Path , LineNumber

Output


Path             LineNumber
----             ----------
D:\files\qwe.txt          4

Re: Полезные советы

Добавлено: 16 окт 2021, 22:14
cirus

Поиск изображения в невидимом окне



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

Wake up, Neo, select all

Clear-Host
try{
$img = Get-Image -Path "C:\menu.bmp" # загрузить изображение
}
catch{
Write-Host "Картинка не загрузилась" -ForegroundColor Red
Stop-Script
}

$window = Find-Window -Title "Warspear Online" # поиск окна с именем Warspear Online
if(!$window){
Write-Host "Окно не найдено" -ForegroundColor Red
Stop-Script
}

Set-WindowTransparency 0 -Handle $window.handle[0] # сделать окно невидимым
Start-Sleep 1 # пауза 1 секунду (можно убрать если не нужна)

$coord = Find-Image $img -Handle $window.handle[0] -Accuracy 90 -Deviation 10 # поиск изображения в окне
if($coord){ # если найдено
Write-Host "Координаты картинки: $($coord.location[0])" -ForegroundColor Green
Click-Mouse $coord.location[0] -Handle $window.handle[0] -Event # клик на картинку, курсор при этом не задействован
}
else{
Write-Host "Картинка не найдена" -ForegroundColor Red
}

Set-WindowTransparency 255 -Handle $window.handle[0] # сделать окно видимым

Re: Полезные советы

Добавлено: 26 окт 2021, 00:23
Fors1k

Получить внешний IP адрес компьютера



Через PowerShell получить публичный IP адрес компьютера можно всего одной строкой кода:

Wake up, Neo, select all

$myIP = (IRM api.myip.com).IP
Write-Host $myIP

Re: Полезные советы

Добавлено: 26 янв 2022, 19:13
Fors1k

Получить результат с определенным шансом



Получить случайное число или объект из массива можно через Get-Random.
А для получения чего-либо с определенной вероятностью можно воспользоваться следующей функцией:

Wake up, Neo, select all

function Get-WithChance($Chance){
(Get-Random -Minimum 1.0 -Maximum 101) -le $Chance
}

Запросить результат с вероятностью успеха 30%:

Wake up, Neo, select all

Get-WithChance 30

Проверим верно ли производится вычисление, выполнив запрос 200 раз:

Wake up, Neo, select all

$tests = 200
(1..$tests|Where{Get-WithChance 30}).Count * 100 / $tests
#29.8

Ну и пример использования на условном коде казино, в котором шанс выигрыша 30%:

Wake up, Neo, select all

if(Get-WithChance 30){
Write-Host 'Вы выиграли 100$' -Fore Green
}
else{
Write-Host "Попробуйте еще раз" -Fore Red
}