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

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

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

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: 357
Joined: 04 May 2018, 16:35

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

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
}
github://oGDIp - GDI+ wrapper for AHK v1.1
vmech
Posts: 361
Joined: 25 Aug 2019, 13:03

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

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: Как сделать вычитание комбинации из числа?

30 Oct 2023, 01:52

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

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 32 guests