1

Тема: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

Необходим таймер на 10 секнунд, который был бы в правом верхнем углу, выскакивал бы поверх всех окон, не требовал бы закрывания для взаимодействия с другими окнами. Таймер нужен для этого скрипта:

numpad1::
looping := true
  while(looping = true)
    {
      SendMessage, 0x50,, 0x4090409,, A ; английская раскладка, так нужно!!!
      Send, {/} ; Нажать / и открыть чат, через Enter не робит
      Send, {Backspace} ; стереть /
      Sleep, 100
      SendInput, Outer Heaven ведёт набор, требования: 400 приведы для боевых, Био3-380 приведы, 3/4 онлайн на кв, Писать в ДС jlonji |{Enter}
      Sleep, 10000 ; задержка в 10 сек
      Send, {/} ; Нажать / и открыть чат, через Enter не робит
      Send, {Backspace} ; стереть /
      Sleep, 100
      SendInput, Outer Heaven ведёт набор, требования: 400 приведы для боевых, Био3-380 приведы, 3/4 онлайн на кв, Писать в ДС jlonji ||{Enter}
      Sleep, 10000 ; задержка в 10 сек
      Send, {/} ; Нажать / и открыть чат, через Enter не робит
      Send, {Backspace} ; стереть /
      Sleep, 100
      SendInput, Outer Heaven ведёт набор, требования: 400 приведы для боевых, Био3-380 приведы, 3/4 онлайн на кв, Писать в ДС jlonji |||{Enter}
      Sleep, 10000 ; задержка в 10 сек
    }
  return

numpad2::
  looping := false
  return

2

Re: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

Вы про это:

CoordMode, ToolTip, Screen
numpad1::
looping := true
SendMessage, 0x50,, 0x4090409,, A ; английская раскладка, так нужно!!!
while(looping = true)
	{
	if (Mod(A_Index, 3) = 1)
		bar := "|"
	else if (Mod(A_Index, 3) = 2)
		bar := "||"
	else if (Mod(A_Index, 3) = 0)
		bar := "|||"

	SendInput, {sc1C}	; открыть чат
    Sleep, 100
    SendInput, Outer Heaven ведёт набор, требования: 400 приведы для боевых, Био3-380 приведы, 3/4 онлайн на кв, Писать в ДС jlonji %bar%{Enter}

	Loop, 10	; задержка 10 раз по 1 сек
		{
		sec := A_Index - 1	; прямой отсчёт 0, 1, 2... 9
	;	sec := 11 - A_Index	; обратный отсчёт 10, 9, 8... 1
		ToolTip, %sec%, 1920, 1	; координаты для разрешения 1920*1080
		Sleep, 1000
		}
    }
  return

numpad2::
  looping := false
  return

?

3

Re: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

Qp
Да, спасибо за понятные описания и за то, что оптимизировали сам код.

4

Re: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

Мне не давал покоя костыль с if-ами, переделал:

CoordMode, ToolTip, Screen
bar := 3
numpad1::
looping := true
SendMessage, 0x50,, 0x4090409,, A ; английская раскладка, так нужно!!!
while(looping = true)
	{
	SendInput, {sc1C}	; открыть чат
    Sleep, 100
    SendInput, Outer Heaven ведёт набор, требования: 400 приведы для боевых, Био3-380 приведы, 3/4 онлайн на кв, Писать в ДС jlonji{sc39}
	i := Mod(A_Index, bar)
	if i
		Loop, %i%
			{
			SendInput, |
			}
	else
		Loop, %bar%
			{
			SendInput, |
			}
	SendInput, {Enter}

	Loop, 10	; задержка 10 раз по 1 сек
		{
		sec := A_Index - 1	; прямой отсчёт 0, 1, 2... 9
	;	sec := 11 - A_Index	; обратный отсчёт 10, 9, 8... 1
		ToolTip, %sec%, 1920, 1	; координаты для разрешения 1920*1080
		Sleep, 1000
		}
    }
  return

numpad2::
  looping := false
  return

5

Re: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

Qp
Не очень понимаю.

if i
		Loop, %i%
			{
			SendInput, |
			}
	else
		Loop, %bar%
			{
			SendInput, |
			}

Если i
  Повторить число i раз
  Написать |
Иначе
  Повторить число bar раз
  Написать |

Вот так я это вижу, я так понимаю, это потому что я не понимаю эту строчку?

i := Mod(A_Index, bar)

6 (изменено: __Михаил__, 2023-11-12 18:29:50)

Re: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

Может так лучше будет?

CoordMode, ToolTip, Screen

;Необходимый текст:
Text := "Outer Heaven ведёт набор, требования: 400 приведы для боевых, Био3-380 приведы, 3/4 онлайн на кв, Писать в ДС jlonji "
One := 0	; Запуск / Остановка через одну клавишу:  1: Включить, 0: Выключить.
Return


Numpad1::		; Запуск / Остановка спама.
KeyWait, % A_ThisHotkey, U	; Ожидать отжатия клавиши.
If (One = 1) && (SW > 0)	; Запрет на выключение.
 Return
ToolTip			; Выключить инфу.
SW := !SW, Bar := 0	; По умолчанию SW = 0 (Таймер выключен / отсчёта нет). Сброс 'Bar'.
SetTimer, Spammer, % (SW ? 1000 : "Off")
Return


Numpad2::	; Выключение спама.
SW := 0
ToolTip
SetTimer, Spammer, Off
Return

Spammer:
ToolTip, % M := Mod(SW++, 10), A_ScreenWidth, 0	; Отображение инфы.
If (M = 0){	; Каждое 10-е срабатывание:
 SendMessage, 0x50,, 0x4090409,, A	; Eng.
 B = |				; Добавочная строка.
 Loop, % Mod(Bar++, 3)
  B .= "|"			; Увел. кол-во.
 SendInput, {sc1C}	; Открыть чат.
 Sleep, 100
 SendInput, % Text B	; Напечатать текст +добавочный.
 SendInput, {Enter}
}
Return
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

7

Re: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

MycopOK пишет:

я не понимаю эту строчку

i := Mod(A_Index, bar)

Да правильно понимаете.

A_Index - номер итерации цикла, начиная с единицы.
Mod(делимое, делитель) возвращает остаток от деления. Поскольку числа целые, без плавающей точки, то остаток целочисленный. (Почему остаток от 1/3 и 2/3 равен 1 и 2, я не вникал.) Если разделилось без остатка, то возвращает ноль. Результат присваивается переменной i.

Выражение

if i

истинно, когда i не равно 0 - значит, есть остаток, и это количество раз печатаем |. Иначе остатка нет, значит, номер итерации цикла кратен переменной bar (в данном случае - 3), и нужно печатать | bar раз.

8

Re: AHK: Таймер с отсчётом в окне в определённой зоне поверх всех окон

Qp
Спасибо, теперь я понял.