Как сделать вычитание комбинации из числа? Topic is solved

Помощь в написании скриптов
marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Как сделать вычитание комбинации из числа?

Post by marusa122 » 29 Oct 2023, 14:52

Здравствуйте!
Есть скрипт Autohotkey:

Code: Select all

:*:-25::
{
	MouseMove, 1280, 650
	Click 2
	ClipSave=%ClipboardAll%
	Clipboard=
	Send, ^{c}
	ClipWait, 2
	
	Result:=Round(Clipboard-25,2)
	MsgBox, 0, Итоговое значение, %Result%
	
	Clipboard=%ClipSave%
	Return
}
Он вычитает из выделенного числа 25 при нажатии комбинации клавиш "-25".
Мне также нужны скрипты для вычитания 24, 18, 10, 13, 8 из выделенного числа при нажатии соответствующих комбинаций. Можно ли этот скрипт сделать универсальным, чтобы не плодить несколько похожих скриптов? Чтобы можно было набрать комбинацию "минус число", и скрипт вычитал это число.

mcl
Posts: 361
Joined: 04 May 2018, 16:35

Re: Как сделать вычитание комбинации из числа?  Topic is solved

Post by mcl » 29 Oct 2023, 17:43

marusa122 wrote: Можно ли этот скрипт сделать универсальным, чтобы не плодить несколько похожих скриптов?
Зачем плодить похожие скрипты самому, когда можно поручить это унылое занятие машине?
NB: тестил в Блокноте, поэтому Send и опции строки-автозамены несколько отличаются от исходного кода.

Code: Select all

Loop {
	If (A_Index < 5)
		Continue
	
	If (A_Index > 99)
		Break
	
	HotString(":?*X:-" . A_Index,  "SubtractNum")
}

SubtractNum() {
	RegexMatch(A_ThisHotkey, "(?<=-)\d+", vNumber)
	Clipboard=
	Send, +{Home}^{c}
	ClipWait, 2
	
	Result:=Round(Clipboard-vNumber,2)
	MsgBox, 0, Итоговое значение, %Result%
	Return
}
Одно но: если мы хотим написать -55, раньше сработает -5.

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

Code: Select all

:?*b0:-::
{
	Input, vNumber, L3 V E, {Enter}{Space}{Tab}   ; Максимум три цифры, или нажать Enter/Space/Tab
	If vNumber Is Not Digit                       ; Если после минуса были не-цифры, это не наш случай
		Return
	
	Loop % StrLen(vNumbers) + 1 + (ErrorLevel ~= "EndKey:")   ; Стираем набранные цифры, минус и пробел/таб/перенос, если он был
		Send {BS}
	
	Clipboard=
	Send, +{Home}^{c}
	ClipWait, 2
	
	Result:=Round(Clipboard-vNumber,2)
	MsgBox, 0, Итоговое значение, %Result%
	Return
}

vmech
Posts: 374
Joined: 25 Aug 2019, 13:03

Re: Как сделать вычитание комбинации из числа?

Post by vmech » 30 Oct 2023, 01:48

Можно использовать символ = в качестве завершающего горячую строку. Благо кнопка с ним находится рядом - в том же ряду что и цифры, и -.
Please post your script code inside [code] ... [/code] block. Thank you.

marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Re: Как сделать вычитание комбинации из числа?

Post by marusa122 » 30 Oct 2023, 01:52

@mcl, спасибо, первый вариант - это то, что нужно!
Там нужно вычитать небольшие числа (меньше 50), так что скрипт работает вполне корректно, если цикл останавливается, когда число больше 49.

Post Reply

Return to “Помощь”