1 (изменено: stuermer, 2022-09-22 21:22:07)

Тема: AHK: Сообщение с таймером

Подскажите, как сделать, чтобы по нажатию горячей клавиши выходило сообщение с таймером обратного отсчета секунд, а по истечении времени шла дальнейшая обработка команд. Т.е. то же самое, что Sleep 5000, но с визуализацией.

2 (изменено: Clannad5, 2022-09-22 17:01:38)

Re: AHK: Сообщение с таймером

stuermer

Вот пример состряпал на коленке, самая главная строка это "Time := 5 - (A_TickCount - StartTime) / 1000":


; Generated by AutoGUI 2.5.8
#SingleInstance Force
#NoEnv
SetWorkingDir %A_ScriptDir%
SetBatchLines -1

Gui Font, s16
Gui Add, Text, x250 y198 w150 h23 +0x200 +Center vTimeText, Text
Gui Font

Gui Show, w620 h420, Window
Return

F2::
StartTime := A_TickCount
Loop
{
Time := 5 - (A_TickCount - StartTime) / 1000
StringSplit, Time, Time,.
GuiControl,, TimeText, %Time1%
Sleep, 15
if Time < 0
{
GuiControl,, TimeText, Время вышло.
Break
}
}
return

GuiEscape:
GuiClose:
    ExitApp

3

Re: AHK: Сообщение с таймером

Clannad5, на коленке — это ещё мягко сказано.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: Clannad5, 2022-09-22 16:56:51)

Re: AHK: Сообщение с таймером

teadrinker
ну ладно, на бревне стряпал.

5

Re: AHK: Сообщение с таймером

Да не, я имел в виду части тела.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Сообщение с таймером

teadrinker
Ааа, об этом...

7

Re: AHK: Сообщение с таймером

Clannad5 пишет:
F2::
Timer := 5
StartTime := A_TickCount
Loop
{
Time := 5 - (A_TickCount - StartTime) / 1000
StringSplit, Time, Time,.
GuiControl,, TimeText, %Time1%

Если серьёзно:
переменная Timer нигде не используется,
StringSplit непонятно зачем,
цикл для таких вещей строго противопоказан, используйте таймер.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Сообщение с таймером

teadrinker

Аа, переменную я забыл убрать, когда сокращал код.
StringSplit - чтобы убрать значение после запятой.

9

Re: AHK: Сообщение с таймером

teadrinker
А чем использование Loop хуже?Из-за однопоточности?

10

Re: AHK: Сообщение с таймером

Конечно. Наверно же предполагалось, что скрипт должен иметь возможность делать что-то ещё во время отсчёта.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Сообщение с таймером

teadrinker
А, такого даже не подозревал.
Тогда да, SetTimer будет лучше, однако запускать SetTimer каждую секунду - это не извращение?Не лучше ли тогда на второй поток вывести?

12

Re: AHK: Сообщение с таймером

А зачем каждую секунду?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Сообщение с таймером

teadrinker
Так он же хочет визуализировать, то есть нужно чтобы каждую секунд уменьшалось, я так понял его вопрос.

14

Re: AHK: Сообщение с таймером

А зачем для этого каждый раз таймер запускать, не пойму? Одного разве не достаточно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: stuermer, 2022-09-22 21:27:38)

Re: AHK: Сообщение с таймером

Clannad5 пишет:

teadrinker
Так он же хочет визуализировать, то есть нужно чтобы каждую секунд уменьшалось, я так понял его вопрос.

Да. Но нужно, чтобы сообщение по истечении времени само исчезло. Можно и без обратного отсчета, просто сообщение, например "Идет обработка...".

16

Re: AHK: Сообщение с таймером

Можно и с MsgBox замутить.
Если что поинтереснее надо, у меня в подписи ссылка на часики.

#SingleInstance Force
#NoEnv
 
duration := 5000
OnMessage(0x44, "OnMsgBox")
MsgBox
Return

OnMsgBox() {
	Global
	OnMessage(0x44, "") 
    DetectHiddenWindows, On
    Process, Exist
    If (WinExist("ahk_class #32770 ahk_pid " . ErrorLevel)) {
		win := WinExist()
		StartTime := A_TickCount
		Control, Hide,, Button1 
		SetTimer, SetText, -1 
    }
}

SetText:
	last := (A_TickCount - StartTime)
	ControlSetText Static1, % (duration - last) // 1000 " sec", ahk_id %win%  
	If duration - last > 1000
		SetTimer, SetText, -1000
	Else 
		SetTimer, Action, % "-" duration - last
	Return 
	
Action:
	WinClose ahk_id %win%
	MsgBox complete
	Return 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Сообщение с таймером

serzh82saratov пишет:

Можно и с MsgBox замутить.

Так на MsgBox кнопку нажимать надо, а нужно чтобы само сообщение исчезло через 5 с.
Сообщения без кнопки бывают?

18

Re: AHK: Сообщение с таймером

stuermer
Так можно же сделать TimeOut на Msgbox, насколько я помню.
Так же еще можно через ToolTip выводить текст.

19

Re: AHK: Сообщение с таймером

stuermer пишет:

Сообщения без кнопки бывают?

А вы код запускали, прежде чем писать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Сообщение с таймером

serzh82saratov
Запустил, да работает, класс, но код слишком большой. Там 2 строчки должно быть, можно без обратного отсчета.

21

Re: AHK: Сообщение с таймером

stuermer пишет:

Там 2 строчки должно быть, можно без обратного отсчета

Как сделаете, выкладывайте.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Сообщение с таймером

stuermer

Код из одной строки:

1. Создаём отдельным файлом скрипт и внедряем в него любой код.
2. Создаём второй ahk скрипт и присоединяем первый через "#Include".

23

Re: AHK: Сообщение с таймером

loop 5
{
   tooltip % 6-A_Index
   sleep 1000
}
msgbox done

24 (изменено: stuermer, 2022-09-24 15:19:24)

Re: AHK: Сообщение с таймером

#SingleInstance Force
#NoEnv

Gui, Add, Pic,, c:\colombo.png
Gui, Show

loop 5
   sleep 1000

Gui, Destroy
ExitApp
Post's attachments

colombo.png 650.08 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.