1

Тема: AHK: Многопоточность

Доброго времени суток. Где-то я уже читал на тему многопоточности, но больше не могу найти тот ресурс. Обычно, ahk при нажатии хоткея начинает выполнение скрипта, но если в это время нажать ещё один, то выполнение того блока приостановится и начнёт выполнятся другой. Танцы с бубном не помогли.
Поэтому прошу помощи, как организовать всю эту свистопляску с многопоточностью.

2

Re: AHK: Многопоточность

Или показывайте код или обращайтесь к гадалкам.

Limon4ek пишет:

при нажатии хоткея начинает выполнение скрипта, но если в это время нажать ещё один, то выполнение того блока приостановится и начнёт выполнятся другой

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

3

Re: AHK: Многопоточность

stealzy пишет:

Это не так.

Вообще-то так.

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

4

Re: AHK: Многопоточность

Limon4ek, если хотите использовать одновременно несколько хотки, то запускайте каждый в отдельном скрипте.
В AHK_L многопоточности нету.

5 (изменено: Limon4ek, 2018-05-07 15:17:20)

Re: AHK: Многопоточность

Спасибо всем за ответы. Вынести хотки в отдельныe файлы не получится, ибо каждый изменяет элементы GUI. Я так понял проще будет перенести это всё дело на какой нибудь полный C#/C++?

6

Re: AHK: Многопоточность

Изменять элементы GUI можно и из другого скрипта.

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

7

Re: AHK: Многопоточность

teadrinker, не подскажите как?

8

Re: AHK: Многопоточность

В общем через команды, начинающиеся с "Control", но может зависеть от конкретного контрола, и от того, что именно нужно поменять.

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

9

Re: AHK: Многопоточность

teadrinker, прошу прощения, но я в ahk зелёный. Не могли бы вы привести пример кода? Надо применить hide к picture.

Gui,add, picture, x1 y0 w50 h50 vPIC, pic.png

10 (изменено: teadrinker, 2018-05-07 19:12:08)

Re: AHK: Многопоточность

Gui, Add, Pic, Icon44, Shell32.dll
Gui, Show, w150, MyGui

Sleep, 1000

; следующий код может быть выполнен из другого скрипта
Control, Hide,, Static1, MyGui ahk_class AutoHotkeyGUI

Static1 здесь это ClassNN контрола Picture, его можно определить с помощью Window Spy. Часть "Static" для картинки будет постоянной, меняться будет только номер в конце в зависимости от наличия других контролов Picture и Text и порядка их добавления.

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

11 (изменено: Limon4ek, 2018-05-07 20:48:02)

Re: AHK: Многопоточность

teadrinker, спасибо, всё понятно, но как быть с изменением текста? Ибо

Guicontrol, ,TEXT ,%var%

работал без первого параметра, но

Control,,%var%, Static21, MyGui ahk_class AutoHotkeyGUI

уже не пройдёт.

12

Re: AHK: Многопоточность

Gui, Add, Text, w100, my text  ; контрол должен быть достаточной ширины, чтоб вместить новый текст
Gui, Show, w150, MyGui
Sleep, 1000

; следующий код может быть выполнен из другого скрипта
ControlSetText, Static1, new text, MyGui ahk_class AutoHotkeyGUI
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

13

Re: AHK: Многопоточность

ControlSetText.

teadrinker пишет:

Вообще-то так

Действительно.

14 (изменено: Limon4ek, 2018-05-07 22:18:27)

Re: AHK: Многопоточность

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

15

Re: AHK: Многопоточность

Как так накладывается? Ничего накладываться не должно, текст заменяется полностью.

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

16

Re: AHK: Многопоточность

Gui, Add, Text,, очень длинный текст ; контрол должен быть достаточной ширины, чтоб вместить новый текст
Gui, Show, w150, MyGui
Sleep, 1000

; следующий код может быть выполнен из другого скрипта
ControlSetText, Static1, короткий текст, MyGui ahk_class AutoHotkeyGUI
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

17 (изменено: Limon4ek, 2018-05-07 23:37:14)

Re: AHK: Многопоточность

teadrinker, в данный момент всё дело выглядит так:
https://image.ibb.co/b2m6uS/AHK2.png
https://image.ibb.co/njWvon/ahk3.png

18

Re: AHK: Многопоточность

Запустите мой код из разных файлов, увидите, что ничего не накладывается. Что у вас происходит, по изображению сказать нельзя.

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

19

Re: AHK: Многопоточность

teadrinker, хорошо, если изображение Вам ничего не говорит, вот скрипт:

;первый файл
Gui,add, picture, x1 y0 w50 h50 v1, .\bind.png ;static 1
Gui,add, picture, x1 y0 w50 h50 v1CD , .\bind1.png ;static2
GuiControl, hide, 1CD
GUI,add, text, x12 y7 w40 h40 c3cfffd vtest +BackGroundTrans, 17 ;static3
GuiControl, hide, test

gui,show,w100,CHECK
sleep,1000
run, %A_ScriptDir%\2.ahk
;второй файл
check:=17
msgbox,,check,check
Control, Hide,, Static1, CHECK ahk_class AutoHotkeyGUI
Control, Show,, Static2, CHECK ahk_class AutoHotkeyGUI


loop, 18
{
	if check > 0 
	{
		Control, show,, Static3, CHECK ahk_class AutoHotkeyGUI
		ControlSetText, Static3, %check%, CHECK ahk_class AutoHotkeyGUI
		Sleep,1000
		check--
		
		
	}
	Else
	{
	ControlSetText, Static3, %check%, CHECK ahk_class AutoHotkeyGUI
	Control, Hide,, Static2, CHECK ahk_class AutoHotkeyGUI
	Control, show,, Static1, CHECK ahk_class AutoHotkeyGUI
	Control, hide,, Static3, CHECK ahk_class AutoHotkeyGUI
	
	}
}
check:= 17

20

Re: AHK: Многопоточность

У вас один видимый контрол накладывается на другой, так нельзя, из-за этого они неправильно перерисовываются.

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

21

Re: AHK: Многопоточность

teadrinker, а как мне исправить данную проблему?

22

Re: AHK: Многопоточность

teadrinker пишет:

У вас один видимый контрол накладывается на другой, так нельзя, из-за этого они неправильно перерисовываются.

Нет, тут я не прав. Эффект связан с применением +BackGroundTrans, попозже напишу как можно его избежать.

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

23

Re: AHK: Многопоточность

teadrinker, окей,жду.

24 (изменено: teadrinker, 2018-05-08 23:23:19)

Re: AHK: Многопоточность

Gui, Add, Pic, x1 y0 w50 h50 v1, bind.png
Gui, Add, Pic, x1 y0 w50 h50 v1CD Hidden, bind1.png
Gui, Add, text, x12 y7 w40 h40 c3cfffd vtest +BackGroundTrans Hidden, 17 ;static3
Gui, Show, w100, CHECK

Sleep, 1000

; этот код может быть выполнен из другого файла
WinWait, CHECK ahk_class AutoHotkeyGUI  ; чтобы каждый раз не указывать окно

Control, Hide,, Static1
Control, Show,, Static2
Control, Show,, Static3

loop 18
{
   WinSet, Redraw  ; нужно выполнить для правильной перерисовки, если используется BackGroundTrans
   ControlSetText, Static3, % 18 - A_Index
   Sleep, 1000
}

Control, Show,, Static1
Control, Hide,, Static2
Control, Hide,, Static3
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

25 (изменено: Limon4ek, 2018-05-08 22:52:17)

Re: AHK: Многопоточность

teadrinker, спасибо.