1

Тема: AHK: Настраиваемый макро менеджер

Доброго времени суток. Решил написать настраиваемый макро менеджер. Но знания "AHK" находятся не на должном уровне. Первым делом я зашёл сюда 1 2 3. Функционал мне более менее понятен но есть небольшие непонятки как считать параметры с поля "ListView" записать их туда .Я так понимаю этих параметров хватит исполнения заддумки.

*~lbutton:: ;

while GetKeyState("LButton","P")

{

DllCall("keybd_event", UInt, 0x31, Int, 0, Int, 0x0001, UInt, 0) ; нажать клавишу по vk коду

DllCall("keybd_event", UInt, 0x31, Int, 0, Int, 0x0002, UInt, 0) ; отпустить клавишу клавишу по vk коду

DllCall("mouse_event", UInt, 0x02, Int, 0, Int, 0, UInt, 0, Int, 0) ; нажать левую кнопку мыши
      
DllCall("mouse_event", UInt, 0x04, Int, 0, Int, 0, UInt, 0, Int, 0) ; отпустить левую кнопку мыши

DllCall("mouse_event", uint, 1, int, x, int, y, uint, 0, int, 0) ; движение мыши по осям x , y относительно курсора 
      
}

В идеале как то так.
http://s020.radikal.ru/i721/1511/11/2748100fc110t.jpg

+ открыть спойлер

Кому не лень помогите пожалуйста.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2

Re: AHK: Настраиваемый макро менеджер

Попробуйте для начала записать. Документация по ListView переведена.

3

Re: AHK: Настраиваемый макро менеджер

Пока вот что получилось.

DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1)
Gui, Add, Text,,Нажмите клавишу
Gui, Add, ComboBox, vDllCall2  , 
Gui, Add, Button, w100 gkey, Добавить
Gui, Add, Text,,Задержка милесекундах
Gui, Add, ComboBox, vSleep ,
Gui, Add, Button, w100 gSleepr, Добавит
Gui, Add, Text,,Клавиши управления
Gui, Add, ComboBox, vHotkey1, LButton |RButton |MButton |WheelUp |WheelDown  |XButton1 |XButton2
Gui, Add, Button, w100 gOK, Изменить 
Gui, Add, ListBox, x150 y100 w490 h480 Multi  vDllCall3  ,
Gui, Show,
return

key:
Gui Submit, NoHide
 GuiControl,, DllCall3, % "НАЖАТА КЛАВИША - " DllCall2 "  `n" 
   Return
Sleepr:
Gui Submit, NoHide
GuiControl,, DllCall3, % "ЗАДЕРЖКА - " Sleep "  `n"
Return

OK:
Gui Submit, NoHide
GuiControlGet, Hotkey
Hotkey, %  "*~" Hotkey1, HKLabel, UseErrorLevel
Return

HKLabel:
while GetKeyState("LButton","P")
{
DllCall("keybd_event", UInt, 0x31, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
Sleep, Sleep
DllCall("keybd_event", UInt, 0x31, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
Sleep, Sleep
}
Return

GuiClose:
ExitApp

Теперь столкнулся с проблемой как конвертировать нажатые буквы и цифры в "vk " коды.Статьи по "vk " кодам смотрел но никак не пойму как это воплотить в жизнь.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

4 (изменено: Alectric, 2015-11-08 09:03:29)

Re: AHK: Настраиваемый макро менеджер

Посмотри тут.

key:={"":"Нет","vk01":"LButton","vk02":"RButton","vk04":"MButton","vk05":"X1Button","vk06":"X2Button","vk08":"BS","vk09":"TAB","vk0D":"Enter","vk10":"Shift","vk11":"Ctrl","vk12":"Alt","vk13":"Pause","vk14":"Caps","vk1B":"Esc","vk20":"Space","vk21":"PgUp","vk22":"PgDn","vk23":"End","vk24":"Home","vk25":"Left","vk26":"Up","vk27":"Right","vk28":"Down","vk29":"Select","vk2A":"Print","vk2B":"Execute","vk2C":"PrScr","vk2D":"Ins","vk2E":"Del","vk2F":"Help","vk30":"0","vk31":"1","vk32":"2","vk33":"3","vk34":"4","vk35":"5","vk36":"6","vk37":"7","vk38":"8","vk39":"9","vk41":"A","vk42":"B","vk43":"C","vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J","vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q","vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X","vk59":"Y","vk5A":"Z","vk5B":"LWin","vk5C":"RWin","vk5D":"App","vk60":"Num0","vk61":"Num1","vk62":"Num2","vk63":"Num3","vk64":"Num4","vk65":"Num5","vk66":"Num6","vk67":"Num7","vk68":"Num8","vk69":"Num9","vk6A":"*","vk6B":"+","vk6D":"-","vk6E":"Dec","vk6F":"/","vk70":"F1","vk71":"F2","vk72":"F3","vk73":"F4","vk74":"F5","vk75":"F6","vk76":"F7","vk77":"F8","vk78":"F9","vk79":"F10","vk7A":"F11","vk7B":"F12","vk90":"NumLck","vk91":"ScrLck","vkAD":"Vol Mute","vkAE":"Vol Down","vkAF":"Vol Up","vkB0":"Next Track","vkB1":"Previous Track","vkB3":"Play/Pause Media"}

vkod:={"Нет":"","LButton":"vk01","RButton":"vk02","MButton":"vk04","X1Button":"vk05","X2Button":"vk06","BS":"vk08","TAB":"vk09","Enter":"vk0D","Shift":"vk10","Ctrl":"vk11","Alt":"vk12","Pause":"vk13","Caps":"vk14","Esc":"vk1B","Space":"vk20","PgUp":"vk21","PgDn":"vk22","End":"vk23","Home":"vk24","Left":"vk25","Up":"vk26","Right":"vk27","Down":"vk28","Select":"vk29","Print":"vk2A","Execute":"vk2B","PrScr":"vk2C","Ins":"vk2D","Del":"vk2E","Help":"vk2F","0":"vk30","1":"vk31","2":"vk32","3":"vk33","4":"vk34","5":"vk35","6":"vk36","7":"vk37","8":"vk38","9":"vk39","A":"vk41","B":"vk42","C":"vk43","D":"vk44","E":"vk45","F":"vk46","G":"vk47","H":"vk48","I":"vk49","J":"vk4A","K":"vk4B","L":"vk4C","M":"vk4D","N":"vk4E","O":"vk4F","P":"vk50","Q":"vk51","R":"vk52","S":"vk53","T":"vk54","U":"vk55","V":"vk56","W":"vk57","X":"vk58","Y":"vk59","Z":"vk5A","LWin":"vk5B","RWin":"vk5C","App":"vk5D","Num0":"vk60","Num1":"vk61","Num2":"vk62","Num3":"vk63","Num4":"vk64","Num5":"vk65","Num6":"vk66","Num7":"vk67","Num8":"vk68","Num9":"vk69","*":"vk6A","+":"vk6B","-":"vk6D","Dec":"vk6E","/":"vk6F","F1":"vk70","F2":"vk71","F3":"vk72","F4":"vk73","F5":"vk74","F6":"vk75","F7":"vk76","F8":"vk77","F9":"vk78","F10":"vk79","F11":"vk7A","F12":"vk7B","NumLck":"vk90","ScrLck":"vk91","Vol Mute":"vkAD","Vol Down":"vkAE","Vol Up":"vkAF","Next Track":"vkB0","Previous Track":"vkB1","Play/Pause Media":"vkB3"}

А вообще, может проще использовать элемент "Hotkey"? И функцию Chr(Number).

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

5

Re: AHK: Настраиваемый макро менеджер

Теперь никак непойму как в "GetKeyState" вставить ту же клавишу что и в Клавише управления.

DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1)

key:={"":"Нет","vk01":"LButton","vk02":"RButton","vk04":"MButton","vk05":"X1Button","vk06":"X2Button","vk08":"BS","vk09":"TAB","vk0D":"Enter","vk10":"Shift","vk11":"Ctrl","vk12":"Alt","vk13":"Pause","vk14":"Caps","vk1B":"Esc","vk20":"Space","vk21":"PgUp","vk22":"PgDn","vk23":"End","vk24":"Home","vk25":"Left","vk26":"Up","vk27":"Right","vk28":"Down","vk29":"Select","vk2A":"Print","vk2B":"Execute","vk2C":"PrScr","vk2D":"Ins","vk2E":"Del","vk2F":"Help","vk30":"0","0x31":"1","vk32":"2","vk33":"3","vk34":"4","vk35":"5","vk36":"6","vk37":"7","vk38":"8","vk39":"9","vk41":"A","vk42":"B","vk43":"C","vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J","vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q","vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X","vk59":"Y","vk5A":"Z","vk5B":"LWin","vk5C":"RWin","vk5D":"App","vk60":"Num0","vk61":"Num1","vk62":"Num2","vk63":"Num3","vk64":"Num4","vk65":"Num5","vk66":"Num6","vk67":"Num7","vk68":"Num8","vk69":"Num9","vk6A":"*","vk6B":"+","vk6D":"-","vk6E":"Dec","vk6F":"/","vk70":"F1","vk71":"F2","vk72":"F3","vk73":"F4","vk74":"F5","vk75":"F6","vk76":"F7","vk77":"F8","vk78":"F9","vk79":"F10","vk7A":"F11","vk7B":"F12","vk90":"NumLck","vk91":"ScrLck","vkAD":"Vol Mute","vkAE":"Vol Down","vkAF":"Vol Up","vkB0":"Next Track","vkB1":"Previous Track","vkB3":"Play/Pause Media"}

vkod:={"Нет":"","LButton":"vk01","RButton":"vk02","MButton":"vk04","X1Button":"vk05","X2Button":"vk06","BS":"vk08","TAB":"vk09","Enter":"vk0D","Shift":"vk10","Ctrl":"vk11","Alt":"vk12","Pause":"vk13","Caps":"vk14","Esc":"vk1B","Space":"vk20","PgUp":"vk21","PgDn":"vk22","End":"vk23","Home":"vk24","Left":"vk25","Up":"vk26","Right":"vk27","Down":"vk28","Select":"vk29","Print":"vk2A","Execute":"vk2B","PrScr":"vk2C","Ins":"vk2D","Del":"vk2E","Help":"vk2F","0":"vk30","1":"0x31","2":"vk32","3":"vk33","4":"vk34","5":"vk35","6":"vk36","7":"vk37","8":"vk38","9":"vk39","A":"vk41","B":"vk42","C":"vk43","D":"vk44","E":"vk45","F":"vk46","G":"vk47","H":"vk48","I":"vk49","J":"vk4A","K":"vk4B","L":"vk4C","M":"vk4D","N":"vk4E","O":"vk4F","P":"vk50","Q":"vk51","R":"vk52","S":"vk53","T":"vk54","U":"vk55","V":"vk56","W":"vk57","X":"vk58","Y":"vk59","Z":"vk5A","LWin":"vk5B","RWin":"vk5C","App":"vk5D","Num0":"vk60","Num1":"vk61","Num2":"vk62","Num3":"vk63","Num4":"vk64","Num5":"vk65","Num6":"vk66","Num7":"vk67","Num8":"vk68","Num9":"vk69","*":"vk6A","+":"vk6B","-":"vk6D","Dec":"vk6E","/":"vk6F","F1":"vk70","F2":"vk71","F3":"vk72","F4":"vk73","F5":"vk74","F6":"vk75","F7":"vk76","F8":"vk77","F9":"vk78","F10":"vk79","F11":"vk7A","F12":"vk7B","NumLck":"vk90","ScrLck":"vk91","Vol Mute":"vkAD","Vol Down":"vkAE","Vol Up":"vkAF","Next Track":"vkB0","Previous Track":"vkB1","Play/Pause Media":"vkB3"}

List=Нет|0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|LButton|RButton|MButton|X1Button|X2Button|BS|TAB|Enter|Shift|Ctrl|Alt|Pause|Caps|Esc|Space|PgUp|PgDn|End|Home|Left|Up|Right|Down|Select|Print|Execute|PrScr|Ins|Del|Help|LWin|RWin|App|Num0|Num1|Num2|Num3|Num4|Num5|Num6|Num7|Num8|Num9|*|+|-|Dec|/|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|NumLck|ScrLck|Vol Mute|Vol Down|Vol Up|Next Track|Previous Track|Play/Pause Media



Gui, Add, Text,,Нажмите клавишу
Gui, Add, ComboBox, v_B1,%List%
Gui, Add, Button, w100 gkeys, Добавить
Gui, Add, Text,,Задержка милесекундах
Gui, Add, ComboBox, vSleep ,
Gui, Add, Button, w100 gSleepr, Добавит
Gui, Add, Text,,Клавиши управления
Gui, Add, ComboBox, v_B2,%List%
Gui, Add, Button, w100 gOK, Изменить 
Gui, Add, ListBox, x150 y100 w490 h480 Multi  vDllCall3  ,
Gui, Show,
return



keys:
Gui Submit, NoHide
Control, % key["" B1 ""],ComboBox1,Настройки джойстика
Control, % key["" B2 ""],ComboBox3,Настройки джойстика
GuiControl,, DllCall3, % "НАЖАТА КЛАВИША - " _B1 "  `n" 
   Return

Sleepr:
Gui Submit, NoHide
GuiControl,, DllCall3, % "ЗАДЕРЖКА - " Sleep "  `n"
Return


OK:
Gui Submit, NoHide
GuiControlGet, Hotkey
Hotkey, %  "$"_B2, HKLabel, UseErrorLevel
B1:=vkod["" _B1 ""]
B2:=vkod["" _B2 ""] 
List:= Name
Return


HKLabel:
while GetKeyState("%Name%","P")
{
DllCall("keybd_event", UInt, B1, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
Sleep, 17
DllCall("keybd_event", UInt, B1, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
Sleep, 17
}
Return

GuiClose:
ExitApp
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

6

Re: AHK: Настраиваемый макро менеджер

Что то как то всё не по порядку.
Зачем:

DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1)

Для чего пытатся перечислять все клавиши клавиатуры? Не удобнее их просто нажимать на клавиатуре?

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

7 (изменено: Alectric, 2015-11-08 18:32:38)

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:
Hotkey, %  "$"_B2, HKLabel, UseErrorLevel

Я имел ввиду элемент управления Hotkey.

Еще, как вариант, можно дописать интерфейс к этому коду. Все действия в том коде записываются в массиве "rec", можно сохранять ее в файл затем загружать для редактирования в интерфейс.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

8 (изменено: serzh82saratov, 2015-11-08 21:18:59)

Re: AHK: Настраиваемый макро менеджер

Alectric пишет:

Я имел ввиду элемент управления Hotkey.

Как минимум не определяет все перечисленные хоткеи.

Думаю задача распространённая, дополнил библиотеку.

По сабжу такой пример:


#NoEnv
#SingleInstance Force
OnExit("GuiClose")
Hotkey_Option("MLRES") 
     
Gui, Add, Edit, Center w300 hwndh1, % Hotkey_Set("B1")
Gui, Add, Edit, Center wp y+10 hwndh2, % Hotkey_Set("B2")
Gui, Add, Button, y+22 wp gSave, save
Gui, Add, Edit, Center y+22 wp r5 vText 
GuiControl, Focus, Text
Hotkey_Register({"B1":h1, "B2":h2})
Gui, Show 
Return

Save:
	GuiControl, , Text, % "`n B1, VK код для DllCall: " Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
		. "`n`n B2, имя для GetKeyState: " Hotkey_ValueFromName("B2")
	Return
	
GuiClose() {
    Hotkey_Exit()
    ExitApp
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Настраиваемый макро менеджер

Я даже не знаю что ответить . Вначале я не хотел перечислять все клавиши клавиатуры , но потом подкинули идею я ухватился за неё , за неимением опыта вззял за основу . Пните в нужную сторону,а то я совсем запутался . В первом посту всё отлично описано на фото , что я хотел от этого менеджера.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

10 (изменено: serzh82saratov, 2015-11-08 21:45:31)

Re: AHK: Настраиваемый макро менеджер

Так вы код запускали?

+ код.


#NoEnv
#SingleInstance Force
OnExit("GuiClose")
Hotkey_Option("MLRES") 
     
Gui, Add, Edit, Center w300 hwndh1, % Hotkey_Set("B1")
Gui, Add, Edit, Center wp y+10 hwndh2, % Hotkey_Set("B2")
Gui, Add, Button, y+22 wp gSave, save
Gui, Add, Edit, Center y+22 wp r5 vText 
GuiControl, Focus, Text
Hotkey_Register({"B1":h1, "B2":h2})
Gui, Show 
Return

Save:
	GuiControl, , Text, % "`n B1, VK код для DllCall: " Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
		. "`n`n B2, имя для GetKeyState: " Hotkey_ValueFromName("B2")
	Return
	
GuiClose() {
    Hotkey_Exit()
    ExitApp
} 


	;  http://forum.script-coding.com/viewtopic.php?pid=72549#p72549

Hotkey_Register(Controls) {
	Static IsStart
	Local Name, Handle
	For Name, Handle in Controls
	{
		Hotkey_Controls("Name", Handle, Name)
		Hotkey_Controls("HwndFromName", Name, Handle)
		GuiControl, +ReadOnly, % Handle
	}
	If IsStart
		Return
	#HotkeyInterval 0
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback("Hotkey_WinEvent", "F"), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	Hotkey_Arr("hHook", Hotkey_SetWindowsHookEx()), Hotkey_RButton()
	Return IsStart := 1
}

Hotkey_Main(Param1, Param2=0) {
	Static OnlyMods, ControlHandle, Hotkey, KeyName, K := {}
	, Prefix := {"LAlt":"<!","LCtrl":"<^","LShift":"<+","LWin":"<#"
				,"RAlt":">!","RCtrl":">^","RShift":">+","RWin":">#"
				,"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
 	, Symbols := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|"
				. "vk43|vk44|vk45|vk46|vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|"
				. "vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local IsMod, Text

	If Param1 = GetMod
		Return K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	If Param1 = Control
	{
		If Param2
		{
			If OnlyMods
			{
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
				OnlyMods := 0, K := {}
			}
			ControlHandle := Param2
			If !Hotkey_Arr("Hook")
				Hotkey_Arr("Hook", 1)
			PostMessage, 0x00B1, -1, -1, , ahk_id %ControlHandle%   ;  EM_SETSEL
		}
		Else If Hotkey_Arr("Hook")
		{
			Hotkey_Arr("Hook", 0), K := {}
			If OnlyMods
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
			SetTimer, Hotkey_IsRegFocus, -200
		}
		Return 1
	}
	If Param1 = Mod
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		If (K["M" IsMod] != "")
			Return 1
		K["M" IsMod] := IsMod "+", K["P" IsMod] := Prefix[IsMod]
	}
	Else If Param1 = ModUp
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		K["M" IsMod] := "", K["P" IsMod] := ""
		If (Hotkey != "")
			Return 1
	}
	(IsMod) ? (KeyName := Hotkey := K.Prefix := "", OnlyMods := 1)
	: (KeyName := GetKeyName(Param1 Param2), OnlyMods := 0
	, (StrLen(KeyName) = 1 ? (KeyName := Format("{:U}", KeyName)) : 0)
	, Hotkey := InStr(Symbols, "|" Param1 "|") ? Param1 : KeyName
	, KeyName := Hotkey = "vkBF" ? "/" : KeyName
	, (Hotkey_Arr("OnlyEngSym") && Hotkey != KeyName ? (KeyName := EngSym[Param1]) : 0)
	, K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin)
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName = "" ? Hotkey_Arr("Empty") : K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return 1

Hotkey_PressName:
	KeyName := Hotkey := A_ThisHotkey, OnlyMods := 0
	K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return
}

Hotkey_LowLevelKeyboardProc(nCode, wParam, lParam) {
	Static Mods := {"vkA4":"LAlt","vkA5":"RAlt","vkA2":"LCtrl","vkA3":"RCtrl"
		,"vkA0":"LShift","vkA1":"RShift","vk5B":"LWin","vk5C":"RWin"}
		, oMem := [], HEAP_ZERO_MEMORY := 0x8, Size := 16, hHeap := DllCall("GetProcessHeap", "Ptr")
	Local pHeap, Wp, Lp, Ext, VK, SC, IsMod
	Critical

	If !Hotkey_Arr("Hook")
		Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam)
	pHeap := DllCall("HeapAlloc", "Ptr", hHeap, "UInt", HEAP_ZERO_MEMORY, "Ptr", Size, "Ptr")
	DllCall("RtlMoveMemory", "Ptr", pHeap, "Ptr", lParam, "Ptr", Size), oMem.Push([wParam, pHeap])
	SetTimer, Hotkey_LLKPWork, -10
	Return nCode < 0 ? DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam) : 1

	Hotkey_LLKPWork:
		While (oMem[1] != "")
		{
			IF Hotkey_Arr("Hook")
			{
				Wp := oMem[1][1], Lp := oMem[1][2]
				VK := Format("vk{:X}", NumGet(Lp + 0, "UInt"))
				Ext := NumGet(Lp + 0, 8, "UInt")
				SC := Format("sc{:X}", (Ext & 1) << 8 | NumGet(Lp + 0, 4, "UInt"))
				If !Hotkey_Arr("SingleKey")
					IsMod := Mods[VK]
				If (Wp = 0x100 || Wp = 0x104)		;  WM_KEYDOWN := 0x100, WM_SYSKEYDOWN := 0x104
					IsMod ? Hotkey_Main("Mod", IsMod) : Hotkey_Main(VK, SC)
				Else IF ((Wp = 0x101 || Wp = 0x105) && VK != "vk5D")   ;  WM_KEYUP := 0x101, WM_SYSKEYUP := 0x105, AppsKey = "vk5D"
					IsMod ? Hotkey_Main("ModUp", IsMod) : 0
			}
			DllCall("HeapFree", "Ptr", hHeap, "UInt", 0, "Ptr", Lp)
			oMem.RemoveAt(1)
		}
		Return
}

Hotkey_Option(Options) {
	Local S_FormatInteger, MouseKey
	#IF Hotkey_Arr("Hook")
	#IF Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
	#IF Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
	#IF Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
	#IF
	IfInString, Options, M
	{
		MouseKey := "MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2"
		Hotkey, IF, Hotkey_Arr("Hook")
		Loop, Parse, MouseKey, |
			Hotkey, %A_LoopField%, Hotkey_PressName
	}
	IfInString, Options, L
	{
		IfInString, Options, S
			Hotkey, IF, Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
		Else
			Hotkey, IF, Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
		Hotkey, LButton, Hotkey_PressName
	}
	IfInString, Options, R
	{
		Hotkey, IF, Hotkey_Arr("Hook")
		Hotkey, RButton, Hotkey_PressName
		Hotkey_Arr("SetRButton", 1)
	}
	IfInString, Options, J
	{
		S_FormatInteger := A_FormatInteger
		SetFormat, IntegerFast, D
		Hotkey, IF, Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
		Loop, 128
			Hotkey % Ceil(A_Index/32) "Joy" Mod(A_Index-1,32)+1, Hotkey_PressName
		SetFormat, IntegerFast, %S_FormatInteger%
	}
	IfInString, Options, S
		Hotkey_Arr("SingleKey", 1)
	IfInString, Options, H
		Hotkey_Arr("LRMods", 1)
	IfInString, Options, E
		Hotkey_Arr("OnlyEngSym", 1)
	Hotkey, IF
}

Hotkey_RButton() {
	#IF Hotkey_IsRegControl()
	#IF
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton Up, Hotkey_RButton
	Hotkey, IF
	Return

	Hotkey_RButton:
		Return
}

Hotkey_GetKeyState(Button) {
	Return GetKeyState(Button, "P")
}

Hotkey_IsRegControl() {
	Local Control
	MouseGetPos,,,, Control, 2
	Return Hotkey_Name(Control) != ""
}

Hotkey_IsRegFocus() {
	Local ControlNN, hFocus
	WinExist("A")
	ControlGetFocus, ControlNN
	ControlGet, hFocus, Hwnd, , %ControlNN%
	Hotkey_Name(hFocus) != "" ? Hotkey_Arr("Hook", 1) : 0
}

Hotkey_WinEvent(hWinEventHook, event, hwnd) {
	Hotkey_Name(hwnd) != "" ? Hotkey_Main("Control", hwnd) : Hotkey_Main("Control")
}

Hotkey_SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
	Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
			, "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

Hotkey_SetWindowsHookEx() {
	Return DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
		, "Int", 13   ;  WH_KEYBOARD_LL := 13
		, "Ptr", RegisterCallback("Hotkey_LowLevelKeyboardProc", "Fast")
		, "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
		, "UInt", 0, "Ptr")
}

Hotkey_Exit() {
	DllCall("UnhookWindowsHookEx", "Ptr", Hotkey_Arr("hHook"))
}

	; -------------------------------------- Save and get variables --------------------------------------

Hotkey_Arr(P*) {
	Static Arr := {Empty:"Нет"}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : (Arr[P[1]] := P[2])
}

Hotkey_Controls(Type, P*) {
	Static ArrName := [], ArrValue := [], ArrValueFromName := {}, ArrHwndFromName := []
	Return P.MaxIndex() = 1 ? Arr%Type%[P[1]] : (Arr%Type%[P[1]] := P[2])
}

Hotkey_Name(Hwnd) {
	Return Hotkey_Controls("Name", Hwnd)
}

Hotkey_Value(Hwnd) {
	Return Hotkey_Controls("Value", Hwnd)
}

Hotkey_ValueFromName(Name) {
	Return Hotkey_Controls("ValueFromName", Name)
}

Hotkey_HwndFromName(Name) {
	Return Hotkey_Controls("HwndFromName", Name)
}

Hotkey_IniPath(Path = "") {
	Return Path = "" ? Hotkey_Arr("IniPath") : Hotkey_Arr("IniPath", Path)
}

Hotkey_IniSection(Section = "") {
	Return Section = "" ? Hotkey_Arr("IniSection") : Hotkey_Arr("IniSection", Section)
}

Hotkey_Set(Name, Value="") {
	Hotkey_Controls("ValueFromName", Name, Value)
	Return Hotkey_HKToStr(Value)
}

Hotkey_IniWrite(Hwnd, Section = "", FilePath = "") {
	IniWrite, % Hotkey_Value(Hwnd), % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Hotkey_Name(Hwnd)
}

	; -------------------------------------- Read and format --------------------------------------

Hotkey_Read(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Hotkey_HKToStr(Data), Hotkey_Controls("ValueFromName", Key, Data)
}

Hotkey_IniRead(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Data
}

Hotkey_HKToStr(Key) {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","Ctrl"],["!","Alt"],["+","Shift"],["#","Win"]]
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local K, K1, K2, I, V, M, R
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K2 = "")
		Return "" Hotkey_Arr("Empty")
	If K2 ~= "^vk"
		K2 := K2 = "vkBF" ? "/" : (Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : Format("{:U}", GetKeyName(K2)))
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M .= V[2] "+") : 0
	Return M . K2
}

Hotkey_HKToSend(Key, Section = "", FilePath = "") {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","LCtrl"],["!","LAlt"],["+","LShift"],["#","LWin"]]
	Local K, K1, K2, I, V, M1, M2, R
	If (Section != "")
		IniRead, Key, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	If (Key = "")
		Return
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M1 .= "{" V[2] " Down}", M2 .= "{" V[2] " Up}") : 0
	Return M1 . "{" K2 "}" . M2
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Настраиваемый макро менеджер

Ничего не понял в этом коде. Это прикол 357 сток кода для определения vk кода.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

12

Re: AHK: Настраиваемый макро менеджер

Зачем нужны 2 поля "Edit" для "GetKeyState" и отдельно для управляющей клавиши.Если управляющая клавиша к примеру "1"  то соответственно "GetKeyState" должно проверять клавишу  "1" .

1::
while GetKeyState("1","P")
{
DllCall("keybd_event", UInt,  0x32, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
Sleep, 17
DllCall("keybd_event", UInt, 0x32, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
Sleep, 17
}
Return
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

13

Re: AHK: Настраиваемый макро менеджер

Строк много, потому что это библиотека не только под эту задачу. Сократить под конкретный случай тут конечно многое можно.

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

14

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:

Зачем нужны 2 поля "Edit" для "GetKeyState" и отдельно для управляющей клавиши.

То есть 2 + 1 = 3, но в примере только 2 поля для ввода клавиш, одно для вк кода DllCall, другое для имени в GetKeyState.

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

15

Re: AHK: Настраиваемый макро менеджер

Ну да поля 2 всё верно . Первое поле для клавиши управления второе для клавиши модификации.
Нажал клавишу 1 а нажалось к примеру 2 .Вот и 2 поля .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

16

Re: AHK: Настраиваемый макро менеджер

Ну и про что разговор?

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

17

Re: AHK: Настраиваемый макро менеджер

Нужно :B1=клавиши модификаци, B2= клавиша управления, B2=клавиша "GetKeyState" . Увас :B1=клавиши модификаци, B2= клавиша "GetKeyState".

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

18

Re: AHK: Настраиваемый макро менеджер

Нужно привязать клавишу управления и клавишу "GetKeyState" к одной переменной. Это возможно?

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

19 (изменено: serzh82saratov, 2015-11-12 07:27:02)

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:

Увас :B1=клавиши модификаци, B2= клавиша "GetKeyState".

У меня там вообще ничего и никак. Просили пнуть в нужном направлении, я вам привёл пример как не выбирать из списка, а просто нажимать клавишу в нужном поле. И как в таком методе из одного поля извлекать код клавиши для DllCall, а из другого имя клавиши которое подходит и для установки хоткея, и для GetKeyState. Или вы ждёте чтобы всё сразу как на картинке, на которой по вашему для всех всё очевидно. Последний пример, наверняка бесполезный:


#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force

OnExit("GuiClose")
Hotkey_Arr("OnlyEngSym", True)
     
Gui, Add, Edit, Center w300 hwndh1, % Hotkey_Set("B1")
Gui, Add, Edit, Center wp y+10 hwndh2, % Hotkey_Set("B2")
Gui, Add, Button, y+22 wp gSave, save
Gui, Add, Edit, Center y+22 wp r5 vText 
GuiControl, Focus, Text
Hotkey_Register(["B1",h1,"KMLRS"], ["B2",h2,"KMLRS"])
Gui, Show 
Return

Save:
	Hotkey, % Hotkey, HKLabel, Off UseErrorLevel
	Hotkey := Hotkey_ValueFromName("B2") 
	Hotkey, % Hotkey, HKLabel, On
	VK := Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
	GuiControl, , Text, % "`nVK: " VK "`n`nHotkey: " Hotkey
	Return
	
HKLabel: 
	While GetKeyState(Hotkey,"P")
	{ 
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, 17
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, 17
	}
	Return

GuiClose() {
    Hotkey_Exit()
    ExitApp
} 

АП: Поправил под новую версию библиотеки.

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

20

Re: AHK: Настраиваемый макро менеджер

Огромное спасибо вам serzh82saratov ,как раз то что нужно.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

21

Re: AHK: Настраиваемый макро менеджер

Теперь во вкладке "мышь" не получается назначить на исполняемые кнопки("LButton","RButton" итд.) нажатые клавиши из поля "ListBox",потомучто там в "DllCall("mouse_event")" идут не VK коды, ссылка.


#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force


List=Нет||LButton|RButton|MButton|WheelUp|WheelDown|XButton1|XButton2|Записать макрос
OnExit("GuiClose")
Hotkey_Option("MLRES") 

Gui, Font, s10 Bold, Cambria
Gui, Add, Tab, +0x400 w250 h600  cRed HwndtabID, Клавиатура| Мышь
Gui, Add, Text,cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY hwndh2, % Hotkey_Set("B2")
Gui, Add, Text, cBlue,Нажмите клавишу :    
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep, 65
Gui, Add, Button, x130 y167 w70 h20 gSleepr, Добавить
Gui, Add, Button,x20 y200 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y230 w100 h20 gSaves, сохранить
Gui, Add, ListBox, x300 y100 w490 h480 cBlue Multi vText  
Gui, Tab, 2 
Gui, Add, Text, x20 y30 w100 h20 cBlue,LButton
Gui, Add, Button, x90 y30 w80 h15 vB1 , Назначить
Gui, Add, Text, x20 y60 w100 h20 cBlue,RButton
Gui, Add, Button, x90 y60 w80 h15 , Назначить
Gui, Add, Text, x20 y90 w100 h20 cBlue,MButton
Gui, Add, Button, x90 y90  w80 h15 , Назначить
Gui, Add, Text, x20 y120 w100 h20 cBlue,WheelUp
Gui, Add, Button, x90 y120 w80 h15 , Назначить
Gui, Add, Text, x10 y150 w100 h20 cBlue,WheelDown
Gui, Add, Button, x90 y150 w80 h15  , Назначить
Gui, Add, Text, x20 y180 w100 h20 cBlue,XButton1
Gui, Add, Button, x90 y180 w80 h15 , Назначить
Gui, Add, Text, x20 y210 w100 h20 cBlue,XButton2
Gui, Add, Button, x90 y210 w80 h15 , Назначить
Gui, Add, Text, x20 y240 w200 h20 cBlue,Клавиши для записи :
Gui, Add, Edit, x20 y260 w100 cRed  vMb gMous hwndh3, % Hotkey_Set("B1")
Gui, Add, Text,x20 y290 w200 h20 cBlue,Задержка милесекундах :
Gui, Add, Edit, x20 y310 w100 cRed  vSleep2 , 65
Gui, Add, Button,x20 y340 w70 h20 gSleepr2, Добавить
Gui, Add, ListBox, x300 y100 w490 h480 cBlue Multi vText2 
GuiControl, Focus, Text
Hotkey_Register({"B1":h1, "B2":h2})
Hotkey_Register({"B1":h3})
Gui, Show 
Return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
IniWrite, %Text%, %SelectedFile%.ini, directory, dir 
IniWrite, %KY%, %SelectedFile%.ini, directory1, dir1 
IniWrite, %Sleep%, %SelectedFile%.ini, directory2, dir2 

FileDelete, .ini
Return

Open:
Gui Submit, NoHide
FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
IniRead, OutputVar3, %SelectedFile%, directory, dir, %A_Space%
IniRead, OutputVar2, %SelectedFile%, directory1, dir1, %A_Space%
IniRead, OutputVar1, %SelectedFile%, directory2, dir2, %A_Space%

GuiControl,, Text, % OutputVar3
GuiControl,, KY, % OutputVar2
GuiControl,, Sleep, % OutputVar1
Return

keys:
Gui Submit, NoHide
GuiControl,, Text, % "НАЖАТА КЛАВИША  : " Kl "  `n" 
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
GuiControl,, Text, % "КЛАВИША ОТПУЩЕНА  : " Kl "  `n"
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Hotkey, % "$" Hotkey, HKLabel, Off UseErrorLevel
	Hotkey := Hotkey_ValueFromName("B2") 
	Hotkey, % "$" Hotkey, HKLabel, On
	VK := Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
	;GuiControl, , Text, % "`nVK: " VK "`n`nHotkey: " Hotkey
   Return

Mous:
Gui Submit, NoHide
GuiControl,, Text2, % "НАЖАТА КЛАВИША  :  " Mb "  `n" 
GuiControl,, Text2, % "ЗАДЕРЖКА  : " Sleep2 "  `n"
GuiControl,, Text2, % "КЛАВИША ОТПУЩЕНА  :  " Mb "  `n" 
GuiControl,, Text2, % "ЗАДЕРЖКА  : " Sleep2 "  `n"
   Return

Sleepr:
Gui Submit, NoHide
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Return

Sleepr2:
Gui Submit, NoHide
GuiControl,, Text2, % "ЗАДЕРЖКА  : " Sleep2 "  `n"WheelUp
Return

B1:
vkDown := {"Нет":"","LButton":"0x02","RButton":"0x0008","MButton":"0x0020","X1Button":"0x0001","X2Button":"0x0002","WheelUp":"0x0800","WheelDown":"0x01000"}
vkUp := {"Нет":"","LButton":"0x04","RButton":"0x0010","MButton":"0x0040","X1Button":"0","X2Button":"0","WheelUp":"0","WheelDown":"0"}	
VK := Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))

Return


HKLabel: 
	While GetKeyState(Hotkey,"P")
	{ 
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep
	}
	Return


~LButton:: 
While GetKeyState("$LButton","P")
{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep2
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep2

DllCall("mouse_event", UInt, 0x02, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать левую кнопку мыши
 Sleep, Sleep2    
DllCall("mouse_event", UInt, 0x04, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
 Sleep, Sleep2

}
Return

~RButton:: 
While GetKeyState("$RButton","P")
{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep2
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep2

DllCall("mouse_event", UInt, vkDown1, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать левую кнопку мыши
 Sleep, Sleep2    
DllCall("mouse_event", UInt, vkUp1, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
 Sleep, Sleep2

}
Return

~MButton:: 
While GetKeyState("$MButton","P")
{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep2
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep2

DllCall("mouse_event", UInt, vkDown2, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать левую кнопку мыши
 Sleep, Sleep2    
DllCall("mouse_event", UInt, vkUp2, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
 Sleep, Sleep2

}
Return

~WheelUp:: 
While GetKeyState("$WheelUp","P")
{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep2
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep2

DllCall("mouse_event", UInt, vkDown2, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать левую кнопку мыши
 Sleep, Sleep2    
DllCall("mouse_event", UInt, vkUp2, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
 Sleep, Sleep2

}
Return

~WheelDown:: 
While GetKeyState("$WheelDown","P")
{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep2
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep2

DllCall("mouse_event", UInt, vkDown3, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать левую кнопку мыши
 Sleep, Sleep2    
DllCall("mouse_event", UInt, vkUp3, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
 Sleep, Sleep2

}
Return

~XButton1:: 
While GetKeyState("$XButton1","P")
{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep2
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep2

DllCall("mouse_event", UInt, vkDown4, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать левую кнопку мыши
 Sleep, Sleep2    
DllCall("mouse_event", UInt, vkUp4, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
 Sleep, Sleep2

}
Return

~XButton2:: 
While GetKeyState("$XButton2","P")
{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
		Sleep, Sleep2
		DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep2

DllCall("mouse_event", UInt, vkDown5, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать левую кнопку мыши
 Sleep, Sleep2    
DllCall("mouse_event", UInt, vkUp5, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
 Sleep, Sleep2

}
Return

Sav:
Gui Submit, NoHide
vkDown := vkodDown
vkUp := vkodUp
Return

GuiClose() {
    Hotkey_Exit()
    ExitApp
} 
 


	;  http://forum.script-coding.com/viewtopic.php?pid=72549#p72549

Hotkey_Register(Controls) {
	Static IsStart
	Local Name, Handle
	For Name, Handle in Controls
	{
		Hotkey_Controls("Name", Handle, Name)
		Hotkey_Controls("HwndFromName", Name, Handle)
		GuiControl, +ReadOnly, % Handle
	}
	If IsStart
		Return
	#HotkeyInterval 0
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback("Hotkey_WinEvent", "F"), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	Hotkey_Arr("hHook", Hotkey_SetWindowsHookEx()), Hotkey_RButton()
	Return IsStart := 1
}

Hotkey_Main(Param1, Param2=0) {
	Static OnlyMods, ControlHandle, Hotkey, KeyName, K := {}
	, Prefix := {"LAlt":"<!","LCtrl":"<^","LShift":"<+","LWin":"<#"
				,"RAlt":">!","RCtrl":">^","RShift":">+","RWin":">#"
				,"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
 	, Symbols := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|"
				. "vk43|vk44|vk45|vk46|vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|"
				. "vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local IsMod, Text

	If Param1 = GetMod
		Return K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	If Param1 = Control
	{
		If Param2
		{
			If OnlyMods
			{
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
				OnlyMods := 0, K := {}
			}
			ControlHandle := Param2
			If !Hotkey_Arr("Hook")
				Hotkey_Arr("Hook", 1)
			PostMessage, 0x00B1, -1, -1, , ahk_id %ControlHandle%   ;  EM_SETSEL
		}
		Else If Hotkey_Arr("Hook")
		{
			Hotkey_Arr("Hook", 0), K := {}
			If OnlyMods
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
			SetTimer, Hotkey_IsRegFocus, -200
		}
		Return 1
	}
	If Param1 = Mod
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		If (K["M" IsMod] != "")
			Return 1
		K["M" IsMod] := IsMod "+", K["P" IsMod] := Prefix[IsMod]
	}
	Else If Param1 = ModUp
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		K["M" IsMod] := "", K["P" IsMod] := ""
		If (Hotkey != "")
			Return 1
	}
	(IsMod) ? (KeyName := Hotkey := K.Prefix := "", OnlyMods := 1)
	: (KeyName := GetKeyName(Param1 Param2), OnlyMods := 0
	, (StrLen(KeyName) = 1 ? (KeyName := Format("{:U}", KeyName)) : 0)
	, Hotkey := InStr(Symbols, "|" Param1 "|") ? Param1 : KeyName
	, KeyName := Hotkey = "vkBF" ? "/" : KeyName
	, (Hotkey_Arr("OnlyEngSym") && Hotkey != KeyName ? (KeyName := EngSym[Param1]) : 0)
	, K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin)
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName = "" ? Hotkey_Arr("Empty") : K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return 1

Hotkey_PressName:
	KeyName := Hotkey := A_ThisHotkey, OnlyMods := 0
	K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return
}

Hotkey_LowLevelKeyboardProc(nCode, wParam, lParam) {
	Static Mods := {"vkA4":"LAlt","vkA5":"RAlt","vkA2":"LCtrl","vkA3":"RCtrl"
		,"vkA0":"LShift","vkA1":"RShift","vk5B":"LWin","vk5C":"RWin"}
		, oMem := [], HEAP_ZERO_MEMORY := 0x8, Size := 16, hHeap := DllCall("GetProcessHeap", "Ptr")
	Local pHeap, Wp, Lp, Ext, VK, SC, IsMod
	Critical

	If !Hotkey_Arr("Hook")
		Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam)
	pHeap := DllCall("HeapAlloc", "Ptr", hHeap, "UInt", HEAP_ZERO_MEMORY, "Ptr", Size, "Ptr")
	DllCall("RtlMoveMemory", "Ptr", pHeap, "Ptr", lParam, "Ptr", Size), oMem.Push([wParam, pHeap])
	SetTimer, Hotkey_LLKPWork, -10
	Return nCode < 0 ? DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam) : 1

	Hotkey_LLKPWork:
		While (oMem[1] != "")
		{
			IF Hotkey_Arr("Hook")
			{
				Wp := oMem[1][1], Lp := oMem[1][2]
				VK := Format("vk{:X}", NumGet(Lp + 0, "UInt"))
				Ext := NumGet(Lp + 0, 8, "UInt")
				SC := Format("sc{:X}", (Ext & 1) << 8 | NumGet(Lp + 0, 4, "UInt"))
				If !Hotkey_Arr("SingleKey")
					IsMod := Mods[VK]
				If (Wp = 0x100 || Wp = 0x104)		;  WM_KEYDOWN := 0x100, WM_SYSKEYDOWN := 0x104
					IsMod ? Hotkey_Main("Mod", IsMod) : Hotkey_Main(VK, SC)
				Else IF ((Wp = 0x101 || Wp = 0x105) && VK != "vk5D")   ;  WM_KEYUP := 0x101, WM_SYSKEYUP := 0x105, AppsKey = "vk5D"
					IsMod ? Hotkey_Main("ModUp", IsMod) : 0
			}
			DllCall("HeapFree", "Ptr", hHeap, "UInt", 0, "Ptr", Lp)
			oMem.RemoveAt(1)
		}
		Return
}

Hotkey_Option(Options) {
	Local S_FormatInteger, MouseKey
	#IF Hotkey_Arr("Hook")
	#IF Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
	#IF Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
	#IF Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
	#IF
	IfInString, Options, M
	{
		MouseKey := "MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2"
		Hotkey, IF, Hotkey_Arr("Hook")
		Loop, Parse, MouseKey, |
			Hotkey, %A_LoopField%, Hotkey_PressName
	}
	IfInString, Options, L
	{
		IfInString, Options, S
			Hotkey, IF, Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
		Else
			Hotkey, IF, Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
		Hotkey, LButton, Hotkey_PressName
	}
	IfInString, Options, R
	{
		Hotkey, IF, Hotkey_Arr("Hook")
		Hotkey, RButton, Hotkey_PressName
		Hotkey_Arr("SetRButton", 1)
	}
	IfInString, Options, J
	{
		S_FormatInteger := A_FormatInteger
		SetFormat, IntegerFast, D
		Hotkey, IF, Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
		Loop, 128
			Hotkey % Ceil(A_Index/32) "Joy" Mod(A_Index-1,32)+1, Hotkey_PressName
		SetFormat, IntegerFast, %S_FormatInteger%
	}
	IfInString, Options, S
		Hotkey_Arr("SingleKey", 1)
	IfInString, Options, H
		Hotkey_Arr("LRMods", 1)
	IfInString, Options, E
		Hotkey_Arr("OnlyEngSym", 1)
	Hotkey, IF
}

Hotkey_RButton() {
	#IF Hotkey_IsRegControl()
	#IF
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton Up, Hotkey_RButton
	Hotkey, IF
	Return

	Hotkey_RButton:
		Return
}

Hotkey_GetKeyState(Button) {
	Return GetKeyState(Button, "P")
}

Hotkey_IsRegControl() {
	Local Control
	MouseGetPos,,,, Control, 2
	Return Hotkey_Name(Control) != ""
}

Hotkey_IsRegFocus() {
	Local ControlNN, hFocus
	WinExist("A")
	ControlGetFocus, ControlNN
	ControlGet, hFocus, Hwnd, , %ControlNN%
	Hotkey_Name(hFocus) != "" ? Hotkey_Arr("Hook", 1) : 0
}

Hotkey_WinEvent(hWinEventHook, event, hwnd) {
	Hotkey_Name(hwnd) != "" ? Hotkey_Main("Control", hwnd) : Hotkey_Main("Control")
}

Hotkey_SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
	Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
			, "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

Hotkey_SetWindowsHookEx() {
	Return DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
		, "Int", 13   ;  WH_KEYBOARD_LL := 13
		, "Ptr", RegisterCallback("Hotkey_LowLevelKeyboardProc", "Fast")
		, "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
		, "UInt", 0, "Ptr")
}

Hotkey_Exit() {
	DllCall("UnhookWindowsHookEx", "Ptr", Hotkey_Arr("hHook"))
}

	; -------------------------------------- Save and get variables --------------------------------------

Hotkey_Arr(P*) {
	Static Arr := {Empty:"Нет"}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : (Arr[P[1]] := P[2])
}

Hotkey_Controls(Type, P*) {
	Static ArrName := [], ArrValue := [], ArrValueFromName := {}, ArrHwndFromName := []
	Return P.MaxIndex() = 1 ? Arr%Type%[P[1]] : (Arr%Type%[P[1]] := P[2])
}

Hotkey_Name(Hwnd) {
	Return Hotkey_Controls("Name", Hwnd)
}

Hotkey_Value(Hwnd) {
	Return Hotkey_Controls("Value", Hwnd)
}

Hotkey_ValueFromName(Name) {
	Return Hotkey_Controls("ValueFromName", Name)
}

Hotkey_HwndFromName(Name) {
	Return Hotkey_Controls("HwndFromName", Name)
}

Hotkey_IniPath(Path = "") {
	Return Path = "" ? Hotkey_Arr("IniPath") : Hotkey_Arr("IniPath", Path)
}

Hotkey_IniSection(Section = "") {
	Return Section = "" ? Hotkey_Arr("IniSection") : Hotkey_Arr("IniSection", Section)
}

Hotkey_Set(Name, Value="") {
	Hotkey_Controls("ValueFromName", Name, Value)
	Return Hotkey_HKToStr(Value)
}

Hotkey_IniWrite(Hwnd, Section = "", FilePath = "") {
	IniWrite, % Hotkey_Value(Hwnd), % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Hotkey_Name(Hwnd)
}

	; -------------------------------------- Read and format --------------------------------------

Hotkey_Read(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Hotkey_HKToStr(Data), Hotkey_Controls("ValueFromName", Key, Data)
}

Hotkey_IniRead(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Data
}

Hotkey_HKToStr(Key) {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","Ctrl"],["!","Alt"],["+","Shift"],["#","Win"]]
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local K, K1, K2, I, V, M, R
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K2 = "")
		Return "" Hotkey_Arr("Empty")
	If K2 ~= "^vk"
		K2 := K2 = "vkBF" ? "/" : (Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : Format("{:U}", GetKeyName(K2)))
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M .= V[2] "+") : 0
	Return M . K2
}

Hotkey_HKToSend(Key, Section = "", FilePath = "") {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","LCtrl"],["!","LAlt"],["+","LShift"],["#","LWin"]]
	Local K, K1, K2, I, V, M1, M2, R
	If (Section != "")
		IniRead, Key, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	If (Key = "")
		Return
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M1 .= "{" V[2] " Down}", M2 .= "{" V[2] " Up}") : 0
	Return M1 . "{" K2 "}" . M2
}
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

22

Re: AHK: Настраиваемый макро менеджер

Вот новый вариант по проще . Немогу сделать отключаемую функцию что бы клавиши посылали сами себя. И ещё не могу разобраться с "WheelDown" и "WheelUp" они зацикливаются, а как сделать что бы они делали 3 поворота колеса.



#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force

List=Нет||LButton|RButton|MButton|WheelUp|WheelDown|XButton1|XButton2|Записать макрос
OnExit("GuiClose")
Hotkey_Option("MLRES") 

Gui, Font, s10 Bold, Cambria

Gui, Add, Text,cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY hwndh2, % Hotkey_Set("B2")
Gui, Add, Text, cBlue,Нажмите клавишу :    
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep, 65
Gui, Add, Button, x130 y137 w70 h20 gSleepr, Добавить
Gui, Add, Button,x20 y170 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y200 w100 h20 gSaves, сохранить
Gui, Add, Button, x20 y230 w100 h20 gSave, Записать
Gui, Add, ListBox, x300 y100 w490 h480 cBlue Multi vText  

Gui, Add, Text, x20 y270 w170 h20 cBlue,Нажмите кнопки мыши :
Gui, Add, Button, x20 y290 w80 h15 gLButton, LButton
Gui, Add, Button, x20 y320 w80 h15 gRButton, RButton
Gui, Add, Button, x20 y350 w80 h15 gMButton, MButton
Gui, Add, Button, x20 y380 w80 h15 gWheelUp, WheelUp
Gui, Add, Button, x20 y410 w80 h15  gWheelDown, WheelDown
Gui, Add, Button, x20 y440 w80 h15 gXButton1, XButton1
Gui, Add, Button, x20 y470 w80 h15 gXButton2, XButton2
GuiControl, Focus, Text
Hotkey_Register({"B1":h1, "B2":h2})
Gui, Show 
Return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
IniWrite, %Text%, %SelectedFile%.ini, directory, dir 
IniWrite, %KY%, %SelectedFile%.ini, directory1, dir1 
IniWrite, %Sleep%, %SelectedFile%.ini, directory2, dir2 

FileDelete, .ini
Return

Open:
Gui Submit, NoHide
FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
IniRead, OutputVar3, %SelectedFile%, directory, dir, %A_Space%
IniRead, OutputVar2, %SelectedFile%, directory1, dir1, %A_Space%
IniRead, OutputVar1, %SelectedFile%, directory2, dir2, %A_Space%

GuiControl,, Text, % OutputVar3
GuiControl,, KY, % OutputVar2
GuiControl,, Sleep, % OutputVar1
Return

keys:
Gui Submit, NoHide
GuiControl,, Text, % "НАЖАТА КЛАВИША  : " Kl "  `n" 
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
GuiControl,, Text, % "КЛАВИША ОТПУЩЕНА  : " Kl "  `n"
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Return

Sleepr:
Gui Submit, NoHide
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Return

Save:
Hotkey, %  "$"Hotkey, HKLabel, Off UseErrorLevel
    Hotkey := Hotkey_ValueFromName("B2") 
	Hotkey, %  "$" Hotkey, HKLabel, On
	   VK := Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
	      ;GuiControl, , Text, % "`nVK: " VK "`n`nHotkey: " Hotkey
Return


LButton:
GuiControl,, Kl, LButton
vkDown := 0x02
vkUp := 0x04
Return

RButton:
GuiControl,, Kl, RButton
vkDown := 0x0008
vkUp := 0x0010
Return

MButton:
GuiControl,, Kl, MButton
vkDown := 0x0020
vkUp :=0x0040
Return

WheelUp:
GuiControl,, Kl, WheelUp
vkDown := 0x0800
vkUp := 0x0800
RD := 1
RU := 0
Return

WheelDown:
GuiControl,, Kl, WheelDown
vkDown := 0x01000
vkUp := 0x01000
RD := 1
RU := 0
Return

XButton1:
GuiControl,, Kl, XButton1
vkDown := 0x0001
vkUp := 0
Return

XButton2:
GuiControl,, Kl, XButton2
vkDown := 0x0001
vkUp := 0
Return

HKLabel: 
while GetKeyState(Hotkey,"P")

{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
      Sleep, Sleep
         DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep
        DllCall("mouse_event", UInt, vkDown, Int, 0, Int, 0, UInt, RD, Int, 0) ; нажать левую кнопку мыши
     Sleep, Sleep   
  DllCall("mouse_event", UInt, vkUp, Int, 0, Int, 0, UInt, RU, Int, 0)
Sleep, Sleep
}
Return

GuiClose() {
    Hotkey_Exit()
    ExitApp
} 
 


	;  http://forum.script-coding.com/viewtopic.php?pid=72549#p72549

Hotkey_Register(Controls) {
	Static IsStart
	Local Name, Handle
	For Name, Handle in Controls
	{
		Hotkey_Controls("Name", Handle, Name)
		Hotkey_Controls("HwndFromName", Name, Handle)
		GuiControl, +ReadOnly, % Handle
	}
	If IsStart
		Return
	#HotkeyInterval 0
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback("Hotkey_WinEvent", "F"), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	Hotkey_Arr("hHook", Hotkey_SetWindowsHookEx()), Hotkey_RButton()
	Return IsStart := 1
}

Hotkey_Main(Param1, Param2=0) {
	Static OnlyMods, ControlHandle, Hotkey, KeyName, K := {}
	, Prefix := {"LAlt":"<!","LCtrl":"<^","LShift":"<+","LWin":"<#"
				,"RAlt":">!","RCtrl":">^","RShift":">+","RWin":">#"
				,"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
 	, Symbols := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|"
				. "vk43|vk44|vk45|vk46|vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|"
				. "vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local IsMod, Text

	If Param1 = GetMod
		Return K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	If Param1 = Control
	{
		If Param2
		{
			If OnlyMods
			{
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
				OnlyMods := 0, K := {}
			}
			ControlHandle := Param2
			If !Hotkey_Arr("Hook")
				Hotkey_Arr("Hook", 1)
			PostMessage, 0x00B1, -1, -1, , ahk_id %ControlHandle%   ;  EM_SETSEL
		}
		Else If Hotkey_Arr("Hook")
		{
			Hotkey_Arr("Hook", 0), K := {}
			If OnlyMods
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
			SetTimer, Hotkey_IsRegFocus, -200
		}
		Return 1
	}
	If Param1 = Mod
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		If (K["M" IsMod] != "")
			Return 1
		K["M" IsMod] := IsMod "+", K["P" IsMod] := Prefix[IsMod]
	}
	Else If Param1 = ModUp
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		K["M" IsMod] := "", K["P" IsMod] := ""
		If (Hotkey != "")
			Return 1
	}
	(IsMod) ? (KeyName := Hotkey := K.Prefix := "", OnlyMods := 1)
	: (KeyName := GetKeyName(Param1 Param2), OnlyMods := 0
	, (StrLen(KeyName) = 1 ? (KeyName := Format("{:U}", KeyName)) : 0)
	, Hotkey := InStr(Symbols, "|" Param1 "|") ? Param1 : KeyName
	, KeyName := Hotkey = "vkBF" ? "/" : KeyName
	, (Hotkey_Arr("OnlyEngSym") && Hotkey != KeyName ? (KeyName := EngSym[Param1]) : 0)
	, K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin)
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName = "" ? Hotkey_Arr("Empty") : K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return 1

Hotkey_PressName:
	KeyName := Hotkey := A_ThisHotkey, OnlyMods := 0
	K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return
}

Hotkey_LowLevelKeyboardProc(nCode, wParam, lParam) {
	Static Mods := {"vkA4":"LAlt","vkA5":"RAlt","vkA2":"LCtrl","vkA3":"RCtrl"
		,"vkA0":"LShift","vkA1":"RShift","vk5B":"LWin","vk5C":"RWin"}
		, oMem := [], HEAP_ZERO_MEMORY := 0x8, Size := 16, hHeap := DllCall("GetProcessHeap", "Ptr")
	Local pHeap, Wp, Lp, Ext, VK, SC, IsMod
	Critical

	If !Hotkey_Arr("Hook")
		Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam)
	pHeap := DllCall("HeapAlloc", "Ptr", hHeap, "UInt", HEAP_ZERO_MEMORY, "Ptr", Size, "Ptr")
	DllCall("RtlMoveMemory", "Ptr", pHeap, "Ptr", lParam, "Ptr", Size), oMem.Push([wParam, pHeap])
	SetTimer, Hotkey_LLKPWork, -10
	Return nCode < 0 ? DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam) : 1

	Hotkey_LLKPWork:
		While (oMem[1] != "")
		{
			IF Hotkey_Arr("Hook")
			{
				Wp := oMem[1][1], Lp := oMem[1][2]
				VK := Format("vk{:X}", NumGet(Lp + 0, "UInt"))
				Ext := NumGet(Lp + 0, 8, "UInt")
				SC := Format("sc{:X}", (Ext & 1) << 8 | NumGet(Lp + 0, 4, "UInt"))
				If !Hotkey_Arr("SingleKey")
					IsMod := Mods[VK]
				If (Wp = 0x100 || Wp = 0x104)		;  WM_KEYDOWN := 0x100, WM_SYSKEYDOWN := 0x104
					IsMod ? Hotkey_Main("Mod", IsMod) : Hotkey_Main(VK, SC)
				Else IF ((Wp = 0x101 || Wp = 0x105) && VK != "vk5D")   ;  WM_KEYUP := 0x101, WM_SYSKEYUP := 0x105, AppsKey = "vk5D"
					IsMod ? Hotkey_Main("ModUp", IsMod) : 0
			}
			DllCall("HeapFree", "Ptr", hHeap, "UInt", 0, "Ptr", Lp)
			oMem.RemoveAt(1)
		}
		Return
}

Hotkey_Option(Options) {
	Local S_FormatInteger, MouseKey
	#IF Hotkey_Arr("Hook")
	#IF Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
	#IF Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
	#IF Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
	#IF
	IfInString, Options, M
	{
		MouseKey := "MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2"
		Hotkey, IF, Hotkey_Arr("Hook")
		Loop, Parse, MouseKey, |
			Hotkey, %A_LoopField%, Hotkey_PressName
	}
	IfInString, Options, L
	{
		IfInString, Options, S
			Hotkey, IF, Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
		Else
			Hotkey, IF, Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
		Hotkey, LButton, Hotkey_PressName
	}
	IfInString, Options, R
	{
		Hotkey, IF, Hotkey_Arr("Hook")
		Hotkey, RButton, Hotkey_PressName
		Hotkey_Arr("SetRButton", 1)
	}
	IfInString, Options, J
	{
		S_FormatInteger := A_FormatInteger
		SetFormat, IntegerFast, D
		Hotkey, IF, Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
		Loop, 128
			Hotkey % Ceil(A_Index/32) "Joy" Mod(A_Index-1,32)+1, Hotkey_PressName
		SetFormat, IntegerFast, %S_FormatInteger%
	}
	IfInString, Options, S
		Hotkey_Arr("SingleKey", 1)
	IfInString, Options, H
		Hotkey_Arr("LRMods", 1)
	IfInString, Options, E
		Hotkey_Arr("OnlyEngSym", 1)
	Hotkey, IF
}

Hotkey_RButton() {
	#IF Hotkey_IsRegControl()
	#IF
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton Up, Hotkey_RButton
	Hotkey, IF
	Return

	Hotkey_RButton:
		Return
}

Hotkey_GetKeyState(Button) {
	Return GetKeyState(Button, "P")
}

Hotkey_IsRegControl() {
	Local Control
	MouseGetPos,,,, Control, 2
	Return Hotkey_Name(Control) != ""
}

Hotkey_IsRegFocus() {
	Local ControlNN, hFocus
	WinExist("A")
	ControlGetFocus, ControlNN
	ControlGet, hFocus, Hwnd, , %ControlNN%
	Hotkey_Name(hFocus) != "" ? Hotkey_Arr("Hook", 1) : 0
}

Hotkey_WinEvent(hWinEventHook, event, hwnd) {
	Hotkey_Name(hwnd) != "" ? Hotkey_Main("Control", hwnd) : Hotkey_Main("Control")
}

Hotkey_SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
	Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
			, "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

Hotkey_SetWindowsHookEx() {
	Return DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
		, "Int", 13   ;  WH_KEYBOARD_LL := 13
		, "Ptr", RegisterCallback("Hotkey_LowLevelKeyboardProc", "Fast")
		, "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
		, "UInt", 0, "Ptr")
}

Hotkey_Exit() {
	DllCall("UnhookWindowsHookEx", "Ptr", Hotkey_Arr("hHook"))
}

	; -------------------------------------- Save and get variables --------------------------------------

Hotkey_Arr(P*) {
	Static Arr := {Empty:"Нет"}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : (Arr[P[1]] := P[2])
}

Hotkey_Controls(Type, P*) {
	Static ArrName := [], ArrValue := [], ArrValueFromName := {}, ArrHwndFromName := []
	Return P.MaxIndex() = 1 ? Arr%Type%[P[1]] : (Arr%Type%[P[1]] := P[2])
}

Hotkey_Name(Hwnd) {
	Return Hotkey_Controls("Name", Hwnd)
}

Hotkey_Value(Hwnd) {
	Return Hotkey_Controls("Value", Hwnd)
}

Hotkey_ValueFromName(Name) {
	Return Hotkey_Controls("ValueFromName", Name)
}

Hotkey_HwndFromName(Name) {
	Return Hotkey_Controls("HwndFromName", Name)
}

Hotkey_IniPath(Path = "") {
	Return Path = "" ? Hotkey_Arr("IniPath") : Hotkey_Arr("IniPath", Path)
}

Hotkey_IniSection(Section = "") {
	Return Section = "" ? Hotkey_Arr("IniSection") : Hotkey_Arr("IniSection", Section)
}

Hotkey_Set(Name, Value="") {
	Hotkey_Controls("ValueFromName", Name, Value)
	Return Hotkey_HKToStr(Value)
}

Hotkey_IniWrite(Hwnd, Section = "", FilePath = "") {
	IniWrite, % Hotkey_Value(Hwnd), % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Hotkey_Name(Hwnd)
}

	; -------------------------------------- Read and format --------------------------------------

Hotkey_Read(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Hotkey_HKToStr(Data), Hotkey_Controls("ValueFromName", Key, Data)
}

Hotkey_IniRead(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Data
}

Hotkey_HKToStr(Key) {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","Ctrl"],["!","Alt"],["+","Shift"],["#","Win"]]
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local K, K1, K2, I, V, M, R
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K2 = "")
		Return "" Hotkey_Arr("Empty")
	If K2 ~= "^vk"
		K2 := K2 = "vkBF" ? "/" : (Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : Format("{:U}", GetKeyName(K2)))
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M .= V[2] "+") : 0
	Return M . K2
}

Hotkey_HKToSend(Key, Section = "", FilePath = "") {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","LCtrl"],["!","LAlt"],["+","LShift"],["#","LWin"]]
	Local K, K1, K2, I, V, M1, M2, R
	If (Section != "")
		IniRead, Key, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	If (Key = "")
		Return
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M1 .= "{" V[2] " Down}", M2 .= "{" V[2] " Up}") : 0
	Return M1 . "{" K2 "}" . M2
}
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

23

Re: AHK: Настраиваемый макро менеджер

Доброго времени суток. Помогите считать значения из "ListBox" поместить их в переменную "VK" и
"vkDown" , "vkUp" (139-145 строки кода).



#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force


OnExit("GuiClose")
Hotkey_Option("MLRES") 

Gui, Font, s10 Bold, Cambria

Gui, Add, Text,cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY hwndh2, % Hotkey_Set("B2")
Gui, Add, Text, cBlue,Нажмите клавишу :    
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep, 65
Gui, Add, Button, x130 y137 w70 h20 gSleepr, Добавить
Gui, Add, Button,x20 y170 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y200 w100 h20 gSaves, сохранить
Gui, Add, Button, x20 y230 w100 h20 gSave, Записать
Gui, Add, ListBox, x300 y100 w490 h480 cBlue Multi vText  

Gui, Add, Text, x20 y270 w170 h20 cBlue,Нажмите кнопки мыши :
Gui, Add, Button, x20 y290 w80 h15 gLButton, LButton
Gui, Add, Button, x20 y320 w80 h15 gRButton, RButton
Gui, Add, Button, x20 y350 w80 h15 gMButton, MButton
Gui, Add, Button, x20 y380 w80 h15 gWheelUp, WheelUp
Gui, Add, Button, x20 y410 w80 h15  gWheelDown, WheelDown
Gui, Add, Button, x20 y440 w80 h15 gXButton1, XButton1
Gui, Add, Button, x20 y470 w80 h15 gXButton2, XButton2
GuiControl, Focus, Text
Hotkey_Register({"B1":h1, "B2":h2})
Gui, Show 
Return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
IniWrite, %Text%, %SelectedFile%.ini, directory, dir 
IniWrite, %KY%, %SelectedFile%.ini, directory1, dir1 
IniWrite, %Sleep%, %SelectedFile%.ini, directory2, dir2 

FileDelete, .ini
Return

Open:
Gui Submit, NoHide
FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
IniRead, OutputVar3, %SelectedFile%, directory, dir, %A_Space%
IniRead, OutputVar2, %SelectedFile%, directory1, dir1, %A_Space%
IniRead, OutputVar1, %SelectedFile%, directory2, dir2, %A_Space%

GuiControl,, Text, % OutputVar3
GuiControl,, KY, % OutputVar2
GuiControl,, Sleep, % OutputVar1
Return

keys:
Gui Submit, NoHide
GuiControl,, Text, % "НАЖАТА КЛАВИША  : " Kl "  `n" 
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
GuiControl,, Text, % "КЛАВИША ОТПУЩЕНА  : " Kl "  `n"
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Return

Sleepr:
Gui Submit, NoHide
GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Return

Save:
Hotkey, %  "$" Hotkey, HKLabel, Off UseErrorLevel
    Hotkey := Hotkey_ValueFromName("B2") 
	Hotkey, %  "$" Hotkey, HKLabel, On
	   VK := Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
	      ;GuiControl, , Text, % "`nVK: " VK "`n`nHotkey: " Hotkey
Return


LButton:
GuiControl,, Kl, LButton
vkDown := 0x02
vkUp := 0x04
Return

RButton:
GuiControl,, Kl, RButton
vkDown := 0x0008
vkUp := 0x0010
Return

MButton:
GuiControl,, Kl, MButton
vkDown := 0x0020
vkUp :=0x0040
Return

WheelUp:
GuiControl,, Kl, WheelUp
vkDown := 0x0800
vkUp := 0x0800
RD := 1
RU := 0
Return

WheelDown:
GuiControl,, Kl, WheelDown
vkDown := 0x01000
vkUp := 0x01000
RD := 1
RU := 0
Return

XButton1:
GuiControl,, Kl, XButton1
vkDown := 0x0001
vkUp := 0
Return

XButton2:
GuiControl,, Kl, XButton2
vkDown := 0x0001
vkUp := 0
Return

HKLabel: 
while GetKeyState(Hotkey,"P")

{
DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
      Sleep, Sleep
         DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
		Sleep, Sleep
        DllCall("mouse_event", UInt, vkDown, Int, 0, Int, 0, UInt, RD, Int, 0) ; нажать левую кнопку мыши
     Sleep, Sleep   
  DllCall("mouse_event", UInt, vkUp, Int, 0, Int, 0, UInt, RU, Int, 0)
Sleep, Sleep
}
Return

GuiClose() {
    Hotkey_Exit()
    ExitApp
} 
 


	;  http://forum.script-coding.com/viewtopic.php?pid=72549#p72549

Hotkey_Register(Controls) {
	Static IsStart
	Local Name, Handle
	For Name, Handle in Controls
	{
		Hotkey_Controls("Name", Handle, Name)
		Hotkey_Controls("HwndFromName", Name, Handle)
		GuiControl, +ReadOnly, % Handle
	}
	If IsStart
		Return
	#HotkeyInterval 0
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback("Hotkey_WinEvent", "F"), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	Hotkey_Arr("hHook", Hotkey_SetWindowsHookEx()), Hotkey_RButton()
	Return IsStart := 1
}

Hotkey_Main(Param1, Param2=0) {
	Static OnlyMods, ControlHandle, Hotkey, KeyName, K := {}
	, Prefix := {"LAlt":"<!","LCtrl":"<^","LShift":"<+","LWin":"<#"
				,"RAlt":">!","RCtrl":">^","RShift":">+","RWin":">#"
				,"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
 	, Symbols := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|"
				. "vk43|vk44|vk45|vk46|vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|"
				. "vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local IsMod, Text

	If Param1 = GetMod
		Return K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	If Param1 = Control
	{
		If Param2
		{
			If OnlyMods
			{
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
				OnlyMods := 0, K := {}
			}
			ControlHandle := Param2
			If !Hotkey_Arr("Hook")
				Hotkey_Arr("Hook", 1)
			PostMessage, 0x00B1, -1, -1, , ahk_id %ControlHandle%   ;  EM_SETSEL
		}
		Else If Hotkey_Arr("Hook")
		{
			Hotkey_Arr("Hook", 0), K := {}
			If OnlyMods
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
			SetTimer, Hotkey_IsRegFocus, -200
		}
		Return 1
	}
	If Param1 = Mod
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		If (K["M" IsMod] != "")
			Return 1
		K["M" IsMod] := IsMod "+", K["P" IsMod] := Prefix[IsMod]
	}
	Else If Param1 = ModUp
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		K["M" IsMod] := "", K["P" IsMod] := ""
		If (Hotkey != "")
			Return 1
	}
	(IsMod) ? (KeyName := Hotkey := K.Prefix := "", OnlyMods := 1)
	: (KeyName := GetKeyName(Param1 Param2), OnlyMods := 0
	, (StrLen(KeyName) = 1 ? (KeyName := Format("{:U}", KeyName)) : 0)
	, Hotkey := InStr(Symbols, "|" Param1 "|") ? Param1 : KeyName
	, KeyName := Hotkey = "vkBF" ? "/" : KeyName
	, (Hotkey_Arr("OnlyEngSym") && Hotkey != KeyName ? (KeyName := EngSym[Param1]) : 0)
	, K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin)
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName = "" ? Hotkey_Arr("Empty") : K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return 1

Hotkey_PressName:
	KeyName := Hotkey := A_ThisHotkey, OnlyMods := 0
	K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return
}

Hotkey_LowLevelKeyboardProc(nCode, wParam, lParam) {
	Static Mods := {"vkA4":"LAlt","vkA5":"RAlt","vkA2":"LCtrl","vkA3":"RCtrl"
		,"vkA0":"LShift","vkA1":"RShift","vk5B":"LWin","vk5C":"RWin"}
		, oMem := [], HEAP_ZERO_MEMORY := 0x8, Size := 16, hHeap := DllCall("GetProcessHeap", "Ptr")
	Local pHeap, Wp, Lp, Ext, VK, SC, IsMod
	Critical

	If !Hotkey_Arr("Hook")
		Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam)
	pHeap := DllCall("HeapAlloc", "Ptr", hHeap, "UInt", HEAP_ZERO_MEMORY, "Ptr", Size, "Ptr")
	DllCall("RtlMoveMemory", "Ptr", pHeap, "Ptr", lParam, "Ptr", Size), oMem.Push([wParam, pHeap])
	SetTimer, Hotkey_LLKPWork, -10
	Return nCode < 0 ? DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam) : 1

	Hotkey_LLKPWork:
		While (oMem[1] != "")
		{
			IF Hotkey_Arr("Hook")
			{
				Wp := oMem[1][1], Lp := oMem[1][2]
				VK := Format("vk{:X}", NumGet(Lp + 0, "UInt"))
				Ext := NumGet(Lp + 0, 8, "UInt")
				SC := Format("sc{:X}", (Ext & 1) << 8 | NumGet(Lp + 0, 4, "UInt"))
				If !Hotkey_Arr("SingleKey")
					IsMod := Mods[VK]
				If (Wp = 0x100 || Wp = 0x104)		;  WM_KEYDOWN := 0x100, WM_SYSKEYDOWN := 0x104
					IsMod ? Hotkey_Main("Mod", IsMod) : Hotkey_Main(VK, SC)
				Else IF ((Wp = 0x101 || Wp = 0x105) && VK != "vk5D")   ;  WM_KEYUP := 0x101, WM_SYSKEYUP := 0x105, AppsKey = "vk5D"
					IsMod ? Hotkey_Main("ModUp", IsMod) : 0
			}
			DllCall("HeapFree", "Ptr", hHeap, "UInt", 0, "Ptr", Lp)
			oMem.RemoveAt(1)
		}
		Return
}

Hotkey_Option(Options) {
	Local S_FormatInteger, MouseKey
	#IF Hotkey_Arr("Hook")
	#IF Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
	#IF Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
	#IF Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
	#IF
	IfInString, Options, M
	{
		MouseKey := "MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2"
		Hotkey, IF, Hotkey_Arr("Hook")
		Loop, Parse, MouseKey, |
			Hotkey, %A_LoopField%, Hotkey_PressName
	}
	IfInString, Options, L
	{
		IfInString, Options, S
			Hotkey, IF, Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
		Else
			Hotkey, IF, Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
		Hotkey, LButton, Hotkey_PressName
	}
	IfInString, Options, R
	{
		Hotkey, IF, Hotkey_Arr("Hook")
		Hotkey, RButton, Hotkey_PressName
		Hotkey_Arr("SetRButton", 1)
	}
	IfInString, Options, J
	{
		S_FormatInteger := A_FormatInteger
		SetFormat, IntegerFast, D
		Hotkey, IF, Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
		Loop, 128
			Hotkey % Ceil(A_Index/32) "Joy" Mod(A_Index-1,32)+1, Hotkey_PressName
		SetFormat, IntegerFast, %S_FormatInteger%
	}
	IfInString, Options, S
		Hotkey_Arr("SingleKey", 1)
	IfInString, Options, H
		Hotkey_Arr("LRMods", 1)
	IfInString, Options, E
		Hotkey_Arr("OnlyEngSym", 1)
	Hotkey, IF
}

Hotkey_RButton() {
	#IF Hotkey_IsRegControl()
	#IF
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton Up, Hotkey_RButton
	Hotkey, IF
	Return

	Hotkey_RButton:
		Return
}

Hotkey_GetKeyState(Button) {
	Return GetKeyState(Button, "P")
}

Hotkey_IsRegControl() {
	Local Control
	MouseGetPos,,,, Control, 2
	Return Hotkey_Name(Control) != ""
}

Hotkey_IsRegFocus() {
	Local ControlNN, hFocus
	WinExist("A")
	ControlGetFocus, ControlNN
	ControlGet, hFocus, Hwnd, , %ControlNN%
	Hotkey_Name(hFocus) != "" ? Hotkey_Arr("Hook", 1) : 0
}

Hotkey_WinEvent(hWinEventHook, event, hwnd) {
	Hotkey_Name(hwnd) != "" ? Hotkey_Main("Control", hwnd) : Hotkey_Main("Control")
}

Hotkey_SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
	Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
			, "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

Hotkey_SetWindowsHookEx() {
	Return DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
		, "Int", 13   ;  WH_KEYBOARD_LL := 13
		, "Ptr", RegisterCallback("Hotkey_LowLevelKeyboardProc", "Fast")
		, "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
		, "UInt", 0, "Ptr")
}

Hotkey_Exit() {
	DllCall("UnhookWindowsHookEx", "Ptr", Hotkey_Arr("hHook"))
}

	; -------------------------------------- Save and get variables --------------------------------------

Hotkey_Arr(P*) {
	Static Arr := {Empty:"Нет"}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : (Arr[P[1]] := P[2])
}

Hotkey_Controls(Type, P*) {
	Static ArrName := [], ArrValue := [], ArrValueFromName := {}, ArrHwndFromName := []
	Return P.MaxIndex() = 1 ? Arr%Type%[P[1]] : (Arr%Type%[P[1]] := P[2])
}

Hotkey_Name(Hwnd) {
	Return Hotkey_Controls("Name", Hwnd)
}

Hotkey_Value(Hwnd) {
	Return Hotkey_Controls("Value", Hwnd)
}

Hotkey_ValueFromName(Name) {
	Return Hotkey_Controls("ValueFromName", Name)
}

Hotkey_HwndFromName(Name) {
	Return Hotkey_Controls("HwndFromName", Name)
}

Hotkey_IniPath(Path = "") {
	Return Path = "" ? Hotkey_Arr("IniPath") : Hotkey_Arr("IniPath", Path)
}

Hotkey_IniSection(Section = "") {
	Return Section = "" ? Hotkey_Arr("IniSection") : Hotkey_Arr("IniSection", Section)
}

Hotkey_Set(Name, Value="") {
	Hotkey_Controls("ValueFromName", Name, Value)
	Return Hotkey_HKToStr(Value)
}

Hotkey_IniWrite(Hwnd, Section = "", FilePath = "") {
	IniWrite, % Hotkey_Value(Hwnd), % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Hotkey_Name(Hwnd)
}

	; -------------------------------------- Read and format --------------------------------------

Hotkey_Read(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Hotkey_HKToStr(Data), Hotkey_Controls("ValueFromName", Key, Data)
}

Hotkey_IniRead(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Data
}

Hotkey_HKToStr(Key) {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","Ctrl"],["!","Alt"],["+","Shift"],["#","Win"]]
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local K, K1, K2, I, V, M, R
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K2 = "")
		Return "" Hotkey_Arr("Empty")
	If K2 ~= "^vk"
		K2 := K2 = "vkBF" ? "/" : (Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : Format("{:U}", GetKeyName(K2)))
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M .= V[2] "+") : 0
	Return M . K2
}

Hotkey_HKToSend(Key, Section = "", FilePath = "") {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","LCtrl"],["!","LAlt"],["+","LShift"],["#","LWin"]]
	Local K, K1, K2, I, V, M1, M2, R
	If (Section != "")
		IniRead, Key, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	If (Key = "")
		Return
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M1 .= "{" V[2] " Down}", M2 .= "{" V[2] " Up}") : 0
	Return M1 . "{" K2 "}" . M2
}
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

24

Re: AHK: Настраиваемый макро менеджер

По моему проще воспользоваться ListView.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

25

Re: AHK: Настраиваемый макро менеджер

Alectric Даже не представляю как это реализовать.Помогите пожалуйста.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

26 (изменено: Alectric, 2015-11-24 20:54:58)

Re: AHK: Настраиваемый макро менеджер

Вечером, если раньше никто не поможет.

...

Вот так как-то:



#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force


OnExit("GuiClose")
Hotkey_Option("MLRES")

Gui, Font, s10 Bold, Cambria

Gui, Add, Text,cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY hwndh2, % Hotkey_Set("B2")
Gui, Add, Text, cBlue,Нажмите клавишу :
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep, 65
Gui, Add, Button, x130 y137 w70 h20 gSleepr, Добавить
Gui, Add, Button,x20 y170 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y200 w100 h20 gSaves, сохранить
Gui, Add, Button, x20 y230 w100 h20 gwrite, Записать
Gui, Add, Listview, x300 y100 w490 h480 cBlue NoSortHdr -Multi,Действие|Значение|VK

Gui, Add, Text, x20 y270 w170 h20 cBlue,Нажмите кнопки мыши :
Gui, Add, Button, x20 y290 w80 h15 gLButton, LButton
Gui, Add, Button, x20 y320 w80 h15 gRButton, RButton
Gui, Add, Button, x20 y350 w80 h15 gMButton, MButton
Gui, Add, Button, x20 y380 w80 h15 gWheelUp, WheelUp
Gui, Add, Button, x20 y410 w80 h15  gWheelDown, WheelDown
Gui, Add, Button, x20 y440 w80 h15 gXButton1, XButton1
Gui, Add, Button, x20 y470 w80 h15 gXButton2, XButton2
GuiControl, Focus, Text
Hotkey_Register({"B1":h1, "B2":h2})
Gui, Show
Return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
IniWrite, %Text%, %SelectedFile%.ini, directory, dir
IniWrite, %KY%, %SelectedFile%.ini, directory1, dir1
IniWrite, %Sleep%, %SelectedFile%.ini, directory2, dir2

FileDelete, .ini
Return

Open:
Gui Submit, NoHide
FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
IniRead, OutputVar3, %SelectedFile%, directory, dir, %A_Space%
IniRead, OutputVar2, %SelectedFile%, directory1, dir1, %A_Space%
IniRead, OutputVar1, %SelectedFile%, directory2, dir2, %A_Space%

GuiControl,, Text, % OutputVar3
GuiControl,, KY, % OutputVar2
GuiControl,, Sleep, % OutputVar1
Return

keys:
Gui Submit, NoHide

Vitkode := Format("{:#x}", GetKeyVK(Kl))
LV_Add(,"Нажатие",Kl,Vitkode)
LV_Add(,"Задержка",Sleep)
Vitkode := Format("{:#x}", GetKeyVK(Kl))
LV_Add(,"Отпускание",Kl,Vitkode)
LV_Add(,"Задержка",Sleep)

;GuiControl,, Text, % "НАЖАТА КЛАВИША  : " Kl "  `n"
;GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
;GuiControl,, Text, % "КЛАВИША ОТПУЩЕНА  : " Kl "  `n"
;GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Return

Sleepr:
Gui Submit, NoHide
LV_Add(,"Задержка",Sleep)
;GuiControl,, Text, % "ЗАДЕРЖКА  : " Sleep "  `n"
Return

write:
Gui Submit, NoHide
act:=LV_GetCount()
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)

  if (action="Задержка")
  {
    act%A_Index%:="sleep"
    val%A_Index%:=value
  }
  else if (action="Нажатие")
  {
    act%A_Index%:="key"
    val%A_Index%:=value " down"
  }
  else if (action="Отпускание")
  {
    act%A_Index%:="key"
    val%A_Index%:=value " up"
  }
}

;Hotkey, %  "$" Hotkey, HKLabel, Off UseErrorLevel
Hotkey := Hotkey_ValueFromName("B2")
Hotkey, % "$" Hotkey, HKLabel, On
VK := Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
;GuiControl, , Text, % "`nVK: " VK "`n`nHotkey: " Hotkey
Return

HKLabel:
while GetKeyState(Hotkey,"P")
{
  loop,% act
  {
tooltip,% val%A_Index% ; для отладки, можно удалить.
    if (act%A_Index%="sleep")
      sleep,% val%A_Index%
    else if (act%A_Index%="key")
      send,% "{" val%A_Index% "}"
  }
;  зачем все это:
;  DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
;  Sleep, Sleep
;  DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
;  Sleep, Sleep
;  DllCall("mouse_event", UInt, vkDown, Int, 0, Int, 0, UInt, RD, Int, 0) ; нажать левую кнопку мыши
;  Sleep, Sleep
;  DllCall("mouse_event", UInt, vkUp, Int, 0, Int, 0, UInt, RU, Int, 0)
;  Sleep, Sleep
}
Return

LButton:
GuiControl,, Kl, LButton
vkDown := 0x02
vkUp := 0x04
Return

RButton:
GuiControl,, Kl, RButton
vkDown := 0x0008
vkUp := 0x0010
Return

MButton:
GuiControl,, Kl, MButton
vkDown := 0x0020
vkUp :=0x0040
Return

WheelUp:
GuiControl,, Kl, WheelUp
vkDown := 0x0800
vkUp := 0x0800
RD := 1
RU := 0
Return

WheelDown:
GuiControl,, Kl, WheelDown
vkDown := 0x01000
vkUp := 0x01000
RD := 1
RU := 0
Return

XButton1:
GuiControl,, Kl, XButton1
vkDown := 0x0001
vkUp := 0
Return

XButton2:
GuiControl,, Kl, XButton2
vkDown := 0x0001
vkUp := 0
Return

GuiClose() {
    Hotkey_Exit()
    ExitApp
}



	;  http://forum.script-coding.com/viewtopic.php?pid=72549#p72549

Hotkey_Register(Controls) {
	Static IsStart
	Local Name, Handle
	For Name, Handle in Controls
	{
		Hotkey_Controls("Name", Handle, Name)
		Hotkey_Controls("HwndFromName", Name, Handle)
		GuiControl, +ReadOnly, % Handle
	}
	If IsStart
		Return
	#HotkeyInterval 0
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback("Hotkey_WinEvent", "F"), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	Hotkey_Arr("hHook", Hotkey_SetWindowsHookEx()), Hotkey_RButton()
	Return IsStart := 1
}

Hotkey_Main(Param1, Param2=0) {
	Static OnlyMods, ControlHandle, Hotkey, KeyName, K := {}
	, Prefix := {"LAlt":"<!","LCtrl":"<^","LShift":"<+","LWin":"<#"
				,"RAlt":">!","RCtrl":">^","RShift":">+","RWin":">#"
				,"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
 	, Symbols := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|"
				. "vk43|vk44|vk45|vk46|vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|"
				. "vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local IsMod, Text

	If Param1 = GetMod
		Return K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	If Param1 = Control
	{
		If Param2
		{
			If OnlyMods
			{
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
				OnlyMods := 0, K := {}
			}
			ControlHandle := Param2
			If !Hotkey_Arr("Hook")
				Hotkey_Arr("Hook", 1)
			PostMessage, 0x00B1, -1, -1, , ahk_id %ControlHandle%   ;  EM_SETSEL
		}
		Else If Hotkey_Arr("Hook")
		{
			Hotkey_Arr("Hook", 0), K := {}
			If OnlyMods
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
			SetTimer, Hotkey_IsRegFocus, -200
		}
		Return 1
	}
	If Param1 = Mod
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		If (K["M" IsMod] != "")
			Return 1
		K["M" IsMod] := IsMod "+", K["P" IsMod] := Prefix[IsMod]
	}
	Else If Param1 = ModUp
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		K["M" IsMod] := "", K["P" IsMod] := ""
		If (Hotkey != "")
			Return 1
	}
	(IsMod) ? (KeyName := Hotkey := K.Prefix := "", OnlyMods := 1)
	: (KeyName := GetKeyName(Param1 Param2), OnlyMods := 0
	, (StrLen(KeyName) = 1 ? (KeyName := Format("{:U}", KeyName)) : 0)
	, Hotkey := InStr(Symbols, "|" Param1 "|") ? Param1 : KeyName
	, KeyName := Hotkey = "vkBF" ? "/" : KeyName
	, (Hotkey_Arr("OnlyEngSym") && Hotkey != KeyName ? (KeyName := EngSym[Param1]) : 0)
	, K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin)
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName = "" ? Hotkey_Arr("Empty") : K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return 1

Hotkey_PressName:
	KeyName := Hotkey := A_ThisHotkey, OnlyMods := 0
	K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return
}

Hotkey_LowLevelKeyboardProc(nCode, wParam, lParam) {
	Static Mods := {"vkA4":"LAlt","vkA5":"RAlt","vkA2":"LCtrl","vkA3":"RCtrl"
		,"vkA0":"LShift","vkA1":"RShift","vk5B":"LWin","vk5C":"RWin"}
		, oMem := [], HEAP_ZERO_MEMORY := 0x8, Size := 16, hHeap := DllCall("GetProcessHeap", "Ptr")
	Local pHeap, Wp, Lp, Ext, VK, SC, IsMod
	Critical

	If !Hotkey_Arr("Hook")
		Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam)
	pHeap := DllCall("HeapAlloc", "Ptr", hHeap, "UInt", HEAP_ZERO_MEMORY, "Ptr", Size, "Ptr")
	DllCall("RtlMoveMemory", "Ptr", pHeap, "Ptr", lParam, "Ptr", Size), oMem.Push([wParam, pHeap])
	SetTimer, Hotkey_LLKPWork, -10
	Return nCode < 0 ? DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam) : 1

	Hotkey_LLKPWork:
		While (oMem[1] != "")
		{
			IF Hotkey_Arr("Hook")
			{
				Wp := oMem[1][1], Lp := oMem[1][2]
				VK := Format("vk{:X}", NumGet(Lp + 0, "UInt"))
				Ext := NumGet(Lp + 0, 8, "UInt")
				SC := Format("sc{:X}", (Ext & 1) << 8 | NumGet(Lp + 0, 4, "UInt"))
				If !Hotkey_Arr("SingleKey")
					IsMod := Mods[VK]
				If (Wp = 0x100 || Wp = 0x104)		;  WM_KEYDOWN := 0x100, WM_SYSKEYDOWN := 0x104
					IsMod ? Hotkey_Main("Mod", IsMod) : Hotkey_Main(VK, SC)
				Else IF ((Wp = 0x101 || Wp = 0x105) && VK != "vk5D")   ;  WM_KEYUP := 0x101, WM_SYSKEYUP := 0x105, AppsKey = "vk5D"
					IsMod ? Hotkey_Main("ModUp", IsMod) : 0
			}
			DllCall("HeapFree", "Ptr", hHeap, "UInt", 0, "Ptr", Lp)
			oMem.RemoveAt(1)
		}
		Return
}

Hotkey_Option(Options) {
	Local S_FormatInteger, MouseKey
	#IF Hotkey_Arr("Hook")
	#IF Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
	#IF Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
	#IF Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
	#IF
	IfInString, Options, M
	{
		MouseKey := "MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2"
		Hotkey, IF, Hotkey_Arr("Hook")
		Loop, Parse, MouseKey, |
			Hotkey, %A_LoopField%, Hotkey_PressName
	}
	IfInString, Options, L
	{
		IfInString, Options, S
			Hotkey, IF, Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
		Else
			Hotkey, IF, Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
		Hotkey, LButton, Hotkey_PressName
	}
	IfInString, Options, R
	{
		Hotkey, IF, Hotkey_Arr("Hook")
		Hotkey, RButton, Hotkey_PressName
		Hotkey_Arr("SetRButton", 1)
	}
	IfInString, Options, J
	{
		S_FormatInteger := A_FormatInteger
		SetFormat, IntegerFast, D
		Hotkey, IF, Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
		Loop, 128
			Hotkey % Ceil(A_Index/32) "Joy" Mod(A_Index-1,32)+1, Hotkey_PressName
		SetFormat, IntegerFast, %S_FormatInteger%
	}
	IfInString, Options, S
		Hotkey_Arr("SingleKey", 1)
	IfInString, Options, H
		Hotkey_Arr("LRMods", 1)
	IfInString, Options, E
		Hotkey_Arr("OnlyEngSym", 1)
	Hotkey, IF
}

Hotkey_RButton() {
	#IF Hotkey_IsRegControl()
	#IF
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton Up, Hotkey_RButton
	Hotkey, IF
	Return

	Hotkey_RButton:
		Return
}

Hotkey_GetKeyState(Button) {
	Return GetKeyState(Button, "P")
}

Hotkey_IsRegControl() {
	Local Control
	MouseGetPos,,,, Control, 2
	Return Hotkey_Name(Control) != ""
}

Hotkey_IsRegFocus() {
	Local ControlNN, hFocus
	WinExist("A")
	ControlGetFocus, ControlNN
	ControlGet, hFocus, Hwnd, , %ControlNN%
	Hotkey_Name(hFocus) != "" ? Hotkey_Arr("Hook", 1) : 0
}

Hotkey_WinEvent(hWinEventHook, event, hwnd) {
	Hotkey_Name(hwnd) != "" ? Hotkey_Main("Control", hwnd) : Hotkey_Main("Control")
}

Hotkey_SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
	Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
			, "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

Hotkey_SetWindowsHookEx() {
	Return DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
		, "Int", 13   ;  WH_KEYBOARD_LL := 13
		, "Ptr", RegisterCallback("Hotkey_LowLevelKeyboardProc", "Fast")
		, "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
		, "UInt", 0, "Ptr")
}

Hotkey_Exit() {
	DllCall("UnhookWindowsHookEx", "Ptr", Hotkey_Arr("hHook"))
}

	; -------------------------------------- Save and get variables --------------------------------------

Hotkey_Arr(P*) {
	Static Arr := {Empty:"Нет"}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : (Arr[P[1]] := P[2])
}

Hotkey_Controls(Type, P*) {
	Static ArrName := [], ArrValue := [], ArrValueFromName := {}, ArrHwndFromName := []
	Return P.MaxIndex() = 1 ? Arr%Type%[P[1]] : (Arr%Type%[P[1]] := P[2])
}

Hotkey_Name(Hwnd) {
	Return Hotkey_Controls("Name", Hwnd)
}

Hotkey_Value(Hwnd) {
	Return Hotkey_Controls("Value", Hwnd)
}

Hotkey_ValueFromName(Name) {
	Return Hotkey_Controls("ValueFromName", Name)
}

Hotkey_HwndFromName(Name) {
	Return Hotkey_Controls("HwndFromName", Name)
}

Hotkey_IniPath(Path = "") {
	Return Path = "" ? Hotkey_Arr("IniPath") : Hotkey_Arr("IniPath", Path)
}

Hotkey_IniSection(Section = "") {
	Return Section = "" ? Hotkey_Arr("IniSection") : Hotkey_Arr("IniSection", Section)
}

Hotkey_Set(Name, Value="") {
	Hotkey_Controls("ValueFromName", Name, Value)
	Return Hotkey_HKToStr(Value)
}

Hotkey_IniWrite(Hwnd, Section = "", FilePath = "") {
	IniWrite, % Hotkey_Value(Hwnd), % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Hotkey_Name(Hwnd)
}

	; -------------------------------------- Read and format --------------------------------------

Hotkey_Read(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Hotkey_HKToStr(Data), Hotkey_Controls("ValueFromName", Key, Data)
}

Hotkey_IniRead(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Data
}

Hotkey_HKToStr(Key) {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","Ctrl"],["!","Alt"],["+","Shift"],["#","Win"]]
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local K, K1, K2, I, V, M, R
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K2 = "")
		Return "" Hotkey_Arr("Empty")
	If K2 ~= "^vk"
		K2 := K2 = "vkBF" ? "/" : (Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : Format("{:U}", GetKeyName(K2)))
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M .= V[2] "+") : 0
	Return M . K2
}

Hotkey_HKToSend(Key, Section = "", FilePath = "") {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","LCtrl"],["!","LAlt"],["+","LShift"],["#","LWin"]]
	Local K, K1, K2, I, V, M1, M2, R
	If (Section != "")
		IniRead, Key, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	If (Key = "")
		Return
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M1 .= "{" V[2] " Down}", M2 .= "{" V[2] " Up}") : 0
	Return M1 . "{" K2 "}" . M2
}

Но нужно с хоткеями (после добавления хоткея перестают работать кнопки с других скриптов, может serzh82saratov подскажет...) и виртуальными кодами разбираться.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

27 (изменено: Alectric, 2015-11-24 23:10:36)

Re: AHK: Настраиваемый макро менеджер

Использование "хуков" негативно сказывается на моих нервах...
Вот вариант без них:

#NoEnv
#SingleInstance Force


OnExit("GuiClose")


key:={"":"Нет","vk01":"LButton","vk02":"RButton","vk04":"MButton","vk05":"X1Button","vk06":"X2Button","vk08":"BS","vk09":"TAB","vk0D":"Enter","vk10":"Shift","vk11":"Ctrl","vk12":"Alt","vk13":"Pause","vk14":"Caps","vk1B":"Esc","vk20":"Space","vk21":"PgUp","vk22":"PgDn","vk23":"End","vk24":"Home","vk25":"Left","vk26":"Up","vk27":"Right","vk28":"Down","vk29":"Select","vk2A":"Print","vk2B":"Execute","vk2C":"PrScr","vk2D":"Ins","vk2E":"Del","vk2F":"Help","vk30":"0","vk31":"1","vk32":"2","vk33":"3","vk34":"4","vk35":"5","vk36":"6","vk37":"7","vk38":"8","vk39":"9","vk41":"A","vk42":"B","vk43":"C","vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J","vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q","vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X","vk59":"Y","vk5A":"Z","vk5B":"LWin","vk5C":"RWin","vk5D":"App","vk60":"Num0","vk61":"Num1","vk62":"Num2","vk63":"Num3","vk64":"Num4","vk65":"Num5","vk66":"Num6","vk67":"Num7","vk68":"Num8","vk69":"Num9","vk6A":"*","vk6B":"+","vk6D":"-","vk6E":"Dec","vk6F":"/","vk70":"F1","vk71":"F2","vk72":"F3","vk73":"F4","vk74":"F5","vk75":"F6","vk76":"F7","vk77":"F8","vk78":"F9","vk79":"F10","vk7A":"F11","vk7B":"F12","vk90":"NumLck","vk91":"ScrLck","vkAD":"Vol Mute","vkAE":"Vol Down","vkAF":"Vol Up","vkB0":"Next Track","vkB1":"Previous Track","vkB3":"Play/Pause Media"}

vkod:={"Нет":"","LButton":"vk01","RButton":"vk02","MButton":"vk04","X1Button":"vk05","X2Button":"vk06","BS":"vk08","TAB":"vk09","Enter":"vk0D","Shift":"vk10","Ctrl":"vk11","Alt":"vk12","Pause":"vk13","Caps":"vk14","Esc":"vk1B","Space":"vk20","PgUp":"vk21","PgDn":"vk22","End":"vk23","Home":"vk24","Left":"vk25","Up":"vk26","Right":"vk27","Down":"vk28","Select":"vk29","Print":"vk2A","Execute":"vk2B","PrScr":"vk2C","Ins":"vk2D","Del":"vk2E","Help":"vk2F","0":"vk30","1":"vk31","2":"vk32","3":"vk33","4":"vk34","5":"vk35","6":"vk36","7":"vk37","8":"vk38","9":"vk39","A":"vk41","B":"vk42","C":"vk43","D":"vk44","E":"vk45","F":"vk46","G":"vk47","H":"vk48","I":"vk49","J":"vk4A","K":"vk4B","L":"vk4C","M":"vk4D","N":"vk4E","O":"vk4F","P":"vk50","Q":"vk51","R":"vk52","S":"vk53","T":"vk54","U":"vk55","V":"vk56","W":"vk57","X":"vk58","Y":"vk59","Z":"vk5A","LWin":"vk5B","RWin":"vk5C","App":"vk5D","Num0":"vk60","Num1":"vk61","Num2":"vk62","Num3":"vk63","Num4":"vk64","Num5":"vk65","Num6":"vk66","Num7":"vk67","Num8":"vk68","Num9":"vk69","*":"vk6A","+":"vk6B","-":"vk6D","Dec":"vk6E","/":"vk6F","F1":"vk70","F2":"vk71","F3":"vk72","F4":"vk73","F5":"vk74","F6":"vk75","F7":"vk76","F8":"vk77","F9":"vk78","F10":"vk79","F11":"vk7A","F12":"vk7B","NumLck":"vk90","ScrLck":"vk91","Vol Mute":"vkAD","Vol Down":"vkAE","Vol Up":"vkAF","Next Track":"vkB0","Previous Track":"vkB1","Play/Pause Media":"vkB3"}

List=Нет|0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|LButton|RButton|MButton|X1Button|X2Button|BS|TAB|Enter|Shift|Ctrl|Alt|Pause|Caps|Esc|Space|PgUp|PgDn|End|Home|Left|Up|Right|Down|Select|Print|Execute|PrScr|Ins|Del|Help|LWin|RWin|App|Num0|Num1|Num2|Num3|Num4|Num5|Num6|Num7|Num8|Num9|*|+|-|Dec|/|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|NumLck|ScrLck|Vol Mute|Vol Down|Vol Up|Next Track|Previous Track|Play/Pause Media



Gui, Font, s10 Bold, Cambria

Gui, Add, Text, xm ym cBlue ,Клавиша управления:
Gui,Add,ComboBox,xp y+5 w100 v_Main,%List%

Gui, Add, Text, xm y+15 cBlue,Добавить клавишу :
Gui,Add,ComboBox,xp y+5 w100 v_key,%List%
Gui, Add, Button, x+10 yp w80 h20 g_Down, Нажать ;
Gui, Add, Button, x+1 yp w80 h20 g_Up, Отпустить ;

Gui, Add, Text, xm y+15 cBlue,Задержка в милесекундах :
Gui, Add, Edit, xm y+5  w100 cRed  vSleep, 65
Gui, Add, Button, x+10 yp w80 h20 g_Sleep, Добавить

Gui, Add, Button,xm y+15 w100 h20 gOpen, Открыть
Gui, Add, Button, xm y+5 w100 h20 gSaves, Сохранить
Gui, Add, Button, xm+100 y+5 w100 h20 gStart, Запустить
Gui, Add, Button, xm+100 y+5 w100 h20 gStop, Остановить

Gui, Add, Listview, xm+300 ym w490 h480 cBlue NoSortHdr -Multi,Действие|Значение|VK

Gui, Show
Return

_Down:
Gui Submit, NoHide
if (_key="Нет")
  return
LV_Add(,"Нажатие",_key,vkod[_key])
return

_Up:
Gui Submit, NoHide
if (_key="Нет")
  return
LV_Add(,"Отпускание",_key,vkod[_key])
return

_Sleep:
Gui Submit, NoHide
LV_Add(,"Задержка",Sleep)
return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini

IniWrite, %_main%, %SelectedFile%,main,main
IniWrite, % LV_GetCount(), %SelectedFile%,main,count
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)

  IniWrite, %action%, %SelectedFile%,data,action%A_Index%
  IniWrite, %value%, %SelectedFile%,data,value%A_Index%
  IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
}
Return

Open:
Gui Submit, NoHide
msgbox,Underconstruction
return
Control,ChooseString,% key[BLLeft],ComboBox1,Настройки джойстика
;FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
;IniRead, OutputVar3, %SelectedFile%, directory, dir, %A_Space%
;IniRead, OutputVar2, %SelectedFile%, directory1, dir1, %A_Space%
;IniRead, OutputVar1, %SelectedFile%, directory2, dir2, %A_Space%
;
;GuiControl,, Text, % OutputVar3
;GuiControl,, KY, % OutputVar2
;GuiControl,, Sleep, % OutputVar1
Return

Start:
Gui Submit, NoHide
act:=LV_GetCount()
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)

  if (action="Задержка")
  {
    act%A_Index%:="sleep"
    val%A_Index%:=value
  }
  else if (action="Нажатие")
  {
    act%A_Index%:="key"
    val%A_Index%:=vk " down"
  }
  else if (action="Отпускание")
  {
    act%A_Index%:="key"
    val%A_Index%:=vk " up"
  }
}

if (_main and LV_GetCount())
{
;  Hotkey, % "$" vkod[old_main], HKLabel, Off UseErrorLevel
;  old_main:=_main
  Hotkey, % "$" _main, HKLabel,UseErrorLevel
  tooltip,Запущено.
  sleep,1000
  tooltip
}
else
  msgbox,Ничего нет.
;msgbox,% vkod[_main]"`n" _main
Return

Stop:
if _main
{
  Hotkey, % "$" _main, HKLabel, Off UseErrorLevel
  tooltip,Остановлено.
  sleep,1000
  tooltip
}
return

HKLabel:
key:=regexreplace(a_thishotkey,"\$?(.*)","$1")
while GetKeyState(key,"P")
{
  loop,% act
  {
tooltip,% "Debug`n" val%A_Index% ; для отладки, можно удалить.
    if (act%A_Index%="sleep")
      sleep,% val%A_Index%
    else if (act%A_Index%="key")
      send,% "{" val%A_Index% "}"
  }
;  зачем все это:
;  DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
;  Sleep, Sleep
;  DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
;  Sleep, Sleep
;  DllCall("mouse_event", UInt, vkDown, Int, 0, Int, 0, UInt, RD, Int, 0) ; нажать левую кнопку мыши
;  Sleep, Sleep
;  DllCall("mouse_event", UInt, vkUp, Int, 0, Int, 0, UInt, RU, Int, 0)
;  Sleep, Sleep
}
Return
;
;WheelUp:
;GuiControl,, Kl, WheelUp
;vkDown := 0x0800
;vkUp := 0x0800
;RD := 1
;RU := 0
;Return
;
;WheelDown:
;GuiControl,, Kl, WheelDown
;vkDown := 0x01000
;vkUp := 0x01000
;RD := 1
;RU := 0
;Return

GuiClose()
{
  ExitApp
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

28

Re: AHK: Настраиваемый макро менеджер

Alectric пишет:

Но нужно с хоткеями (после добавления хоткея перестают работать кнопки с других скриптов, может serzh82saratov подскажет...) и виртуальными кодами разбираться.

А в чём именно проблема?

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

29 (изменено: Alectric, 2015-11-25 06:48:02)

Re: AHK: Настраиваемый макро менеджер

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

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

30

Re: AHK: Настраиваемый макро менеджер

После запуска скрипта

Какого именно?

перестают работать хоткеи других скриптов

Что, все хоткеи?

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

31 (изменено: Alectric, 2015-11-25 17:55:22)

Re: AHK: Настраиваемый макро менеджер

serzh82saratov пишет:

Какого именно?

26й пост.

serzh82saratov пишет:

Что, все хоткеи?

Все не проверял, но большинство тех, которыми часто пользуюсь (BackSpace, Ctrl, MButton).

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

32

Re: AHK: Настраиваемый макро менеджер

Всё равно не ясно, в скрипте назначили одну кнопку, а не работают сразу после этого любые другие кнопки в других скриптах, или только та которую назначили?

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

33

Re: AHK: Настраиваемый макро менеджер

serzh82saratov пишет:

не работают сразу после этого любые другие кнопки в других скриптах

Верно.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

34

Re: AHK: Настраиваемый макро менеджер

У меня такого нет.

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

35

Re: AHK: Настраиваемый макро менеджер

А подскажите как можно очистить поле "Listview" , либо выделить и стереть кнопкой "Back Spase" ну или как нибудь по другому. Кстате вариант с хоткеями значительно удобнее .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

36 (изменено: Alectric, 2015-11-27 16:22:07)

Re: AHK: Настраиваемый макро менеджер

Заменить несколько строчек и добавить несколько новых:

Gui, Add, Listview, xm+300 ym w490 h480 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение|VK

Gui, Show
Return

Listview:
if A_GuiEvent=RightClick
  LV_Delete(A_EventInfo)
return

При нажатии на каком либо пункте правой кнопкой мыши - этот пункт удалится.

ЗЫ Делаю на основе свего кода, т.к. код с "хуками" у меня не работает.

...

Можно перетаскивать пункты меню левой кнопкой мыши. Можно открывать сохраненные файлы.

#NoEnv
#SingleInstance Force


OnExit("GuiClose")


key:={"":"Нет","vk01":"LButton","vk02":"RButton","vk04":"MButton","vk05":"X1Button","vk06":"X2Button","vk08":"BS","vk09":"TAB","vk0D":"Enter","vk10":"Shift","vk11":"Ctrl","vk12":"Alt","vk13":"Pause","vk14":"Caps","vk1B":"Esc","vk20":"Space","vk21":"PgUp","vk22":"PgDn","vk23":"End","vk24":"Home","vk25":"Left","vk26":"Up","vk27":"Right","vk28":"Down","vk29":"Select","vk2A":"Print","vk2B":"Execute","vk2C":"PrScr","vk2D":"Ins","vk2E":"Del","vk2F":"Help","vk30":"0","vk31":"1","vk32":"2","vk33":"3","vk34":"4","vk35":"5","vk36":"6","vk37":"7","vk38":"8","vk39":"9","vk41":"A","vk42":"B","vk43":"C","vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J","vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q","vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X","vk59":"Y","vk5A":"Z","vk5B":"LWin","vk5C":"RWin","vk5D":"App","vk60":"Num0","vk61":"Num1","vk62":"Num2","vk63":"Num3","vk64":"Num4","vk65":"Num5","vk66":"Num6","vk67":"Num7","vk68":"Num8","vk69":"Num9","vk6A":"*","vk6B":"+","vk6D":"-","vk6E":"Dec","vk6F":"/","vk70":"F1","vk71":"F2","vk72":"F3","vk73":"F4","vk74":"F5","vk75":"F6","vk76":"F7","vk77":"F8","vk78":"F9","vk79":"F10","vk7A":"F11","vk7B":"F12","vk90":"NumLck","vk91":"ScrLck","vkAD":"Vol Mute","vkAE":"Vol Down","vkAF":"Vol Up","vkB0":"Next Track","vkB1":"Previous Track","vkB3":"Play/Pause Media"}

vkod:={"Нет":"","LButton":"vk01","RButton":"vk02","MButton":"vk04","X1Button":"vk05","X2Button":"vk06","BS":"vk08","TAB":"vk09","Enter":"vk0D","Shift":"vk10","Ctrl":"vk11","Alt":"vk12","Pause":"vk13","Caps":"vk14","Esc":"vk1B","Space":"vk20","PgUp":"vk21","PgDn":"vk22","End":"vk23","Home":"vk24","Left":"vk25","Up":"vk26","Right":"vk27","Down":"vk28","Select":"vk29","Print":"vk2A","Execute":"vk2B","PrScr":"vk2C","Ins":"vk2D","Del":"vk2E","Help":"vk2F","0":"vk30","1":"vk31","2":"vk32","3":"vk33","4":"vk34","5":"vk35","6":"vk36","7":"vk37","8":"vk38","9":"vk39","A":"vk41","B":"vk42","C":"vk43","D":"vk44","E":"vk45","F":"vk46","G":"vk47","H":"vk48","I":"vk49","J":"vk4A","K":"vk4B","L":"vk4C","M":"vk4D","N":"vk4E","O":"vk4F","P":"vk50","Q":"vk51","R":"vk52","S":"vk53","T":"vk54","U":"vk55","V":"vk56","W":"vk57","X":"vk58","Y":"vk59","Z":"vk5A","LWin":"vk5B","RWin":"vk5C","App":"vk5D","Num0":"vk60","Num1":"vk61","Num2":"vk62","Num3":"vk63","Num4":"vk64","Num5":"vk65","Num6":"vk66","Num7":"vk67","Num8":"vk68","Num9":"vk69","*":"vk6A","+":"vk6B","-":"vk6D","Dec":"vk6E","/":"vk6F","F1":"vk70","F2":"vk71","F3":"vk72","F4":"vk73","F5":"vk74","F6":"vk75","F7":"vk76","F8":"vk77","F9":"vk78","F10":"vk79","F11":"vk7A","F12":"vk7B","NumLck":"vk90","ScrLck":"vk91","Vol Mute":"vkAD","Vol Down":"vkAE","Vol Up":"vkAF","Next Track":"vkB0","Previous Track":"vkB1","Play/Pause Media":"vkB3"}

List=Нет|0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|LButton|RButton|MButton|X1Button|X2Button|BS|TAB|Enter|Shift|Ctrl|Alt|Pause|Caps|Esc|Space|PgUp|PgDn|End|Home|Left|Up|Right|Down|Select|Print|Execute|PrScr|Ins|Del|Help|LWin|RWin|App|Num0|Num1|Num2|Num3|Num4|Num5|Num6|Num7|Num8|Num9|*|+|-|Dec|/|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|NumLck|ScrLck|Vol Mute|Vol Down|Vol Up|Next Track|Previous Track|Play/Pause Media


menu,menu,add,Удалить,Delet


Gui, Font, s10 Bold, Cambria

Gui, Add, Text, xm ym cBlue ,Клавиша управления:
Gui,Add,ComboBox,xp y+5 w150 v_Main,%List%

Gui, Add, Text, xm y+15 cBlue,Добавить клавишу :
Gui,Add,ComboBox,xp y+5 w100 v_key,%List%
Gui, Add, Button, x+10 yp w80 h20 g_Down, Нажать ;
Gui, Add, Button, x+1 yp w80 h20 g_Up, Отпустить ;

Gui, Add, Text, xm y+15 cBlue,Задержка в милесекундах :
Gui, Add, Edit, xm y+5  w100 cRed  vSleep, 65
Gui, Add, Button, x+10 yp w80 h20 g_Sleep, Добавить

Gui, Add, Button,xm y+15 w100 h20 gOpen, Открыть
Gui, Add, Button, xm y+5 w100 h20 gSaves, Сохранить
Gui, Add, Button, xm+100 y+5 w100 h20 gStart, Запустить
Gui, Add, Button, xm+100 y+5 w100 h20 gStop, Остановить

Gui, Add, Listview, xm+300 ym w490 h480 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение|VK

Gui, Show
Return

Listview:
if A_GuiEvent=RightClick
{
  if selected:=A_EventInfo
    menu,menu,show
}
else if A_GuiEvent=D
{
  mousegetpos,,MenuY
  keywait,lbutton,L
  mousegetpos,,MenuYY
  LV_GetText(tmp_action,A_EventInfo,1)
  LV_GetText(tmp_value,A_EventInfo,2)
  LV_GetText(tmp_vk,A_EventInfo,3)
  if (MenuY>MenuYY and A_EventInfo>1)
    RowNumb:=A_EventInfo-1
  else if (A_EventInfo<LV_GetCount())
    RowNumb:=A_EventInfo+1
  LV_GetText(tmp2_action,RowNumb,1)
  LV_GetText(tmp2_value,RowNumb,2)
  LV_GetText(tmp2_vk,RowNumb,3)
  LV_Modify(A_EventInfo,,tmp2_action,tmp2_value,tmp2_vk)
  LV_Modify(RowNumb,,tmp_action,tmp_value,tmp_vk)
}
return
Delet:
LV_Delete(selected)
return

_Down:
Gui Submit, NoHide
if (_key="Нет")
  return
LV_Add(,"Нажатие",_key,vkod[_key])
return

_Up:
Gui Submit, NoHide
if (_key="Нет")
  return
LV_Add(,"Отпускание",_key,vkod[_key])
return

_Sleep:
Gui Submit, NoHide
LV_Add(,"Задержка",Sleep)
return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
if !instr(SelectedFile,".ini")
  SelectedFile.=".ini"
IniWrite, %_main%, %SelectedFile%,main,main
IniWrite, % LV_GetCount(), %SelectedFile%,main,count
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)

  IniWrite, %action%, %SelectedFile%,data,action%A_Index%
  IniWrite, %value%, %SelectedFile%,data,value%A_Index%
  IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
}
Return

Open:
Gui Submit, NoHide

FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
if ErrorLevel
  return
LV_Delete()
IniRead,main,%SelectedFile%,main,main
Control,ChooseString,% main,ComboBox1
IniRead,count,%SelectedFile%,main,count
loop,% count
{
  IniRead,action,%SelectedFile%,data,action%A_Index%
  IniRead,value,%SelectedFile%,data,value%A_Index%
  IniRead,vk,%SelectedFile%,data,vk%A_Index%
  if (action="Задержка")
    LV_Add(,"Задержка",value)
  else if (action="Нажатие")
    LV_Add(,"Нажатие",value,vk)
  else if (action="Отпускание")
    LV_Add(,"Отпускание",value,vk)
}
Return

Start:
Gui Submit, NoHide
act:=LV_GetCount()
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)

  if (action="Задержка")
  {
    act%A_Index%:="sleep"
    val%A_Index%:=value
  }
  else if (action="Нажатие")
  {
    act%A_Index%:="key"
    val%A_Index%:=vk " down"
  }
  else if (action="Отпускание")
  {
    act%A_Index%:="key"
    val%A_Index%:=vk " up"
  }
}

if (_main and LV_GetCount())
{
;  Hotkey, % "$" vkod[old_main], HKLabel, Off UseErrorLevel
;  old_main:=_main
  Hotkey, % "$" _main, HKLabel,UseErrorLevel
  tooltip,Запущено.
  sleep,1000
  tooltip
}
else
  msgbox,Ничего нет.
;msgbox,% vkod[_main]"`n" _main
Return

Stop:
if _main
{
  Hotkey, % "$" _main, HKLabel, Off UseErrorLevel
  tooltip,Остановлено.
  sleep,1000
  tooltip
}
return

HKLabel:
key:=regexreplace(a_thishotkey,"\$?(.*)","$1")
while GetKeyState(key,"P")
{
  loop,% act
  {
;tooltip,% "Debug`n" val%A_Index% ; для отладки, можно удалить.
    if (act%A_Index%="sleep")
      sleep,% val%A_Index%
    else if (act%A_Index%="key")
      send,% "{" val%A_Index% "}"
  }
;  зачем все это:
;  DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0001, UInt, 0, Int, 0) ; нажать клавишу по vk коду
;  Sleep, Sleep
;  DllCall("keybd_event", UInt, VK, Int, 0, Int, 0x0002, UInt, 0, Int, 0)
;  Sleep, Sleep
;  DllCall("mouse_event", UInt, vkDown, Int, 0, Int, 0, UInt, RD, Int, 0) ; нажать левую кнопку мыши
;  Sleep, Sleep
;  DllCall("mouse_event", UInt, vkUp, Int, 0, Int, 0, UInt, RU, Int, 0)
;  Sleep, Sleep
}
Return
;
;WheelUp:
;GuiControl,, Kl, WheelUp
;vkDown := 0x0800
;vkUp := 0x0800
;RD := 1
;RU := 0
;Return
;
;WheelDown:
;GuiControl,, Kl, WheelDown
;vkDown := 0x01000
;vkUp := 0x01000
;RD := 1
;RU := 0
;Return

GuiClose()
{
  ExitApp
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

37 (изменено: serzh82saratov, 2015-11-27 18:23:05)

Re: AHK: Настраиваемый макро менеджер

Alectric
А как назначить "NumpadUp"?

И что за кнопка "Select"?

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

38 (изменено: Alectric, 2015-11-27 18:54:33)

Re: AHK: Настраиваемый макро менеджер

Виртуальные коды клавиш

serzh82saratov пишет:

И что за кнопка "Select"?

VK_SELECT 29 SELECT key

serzh82saratov пишет:

А как назначить "NumpadUp"?

VK_NUMPAD8 68 Numeric keypad 8 key

...

Пробовал запускать пример отсюда - тоже-самое, вылетают все хоткеи других скриптов...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

39

Re: AHK: Настраиваемый макро менеджер

По vk29 GetKeyName ничего не возвращает.

Alectric пишет:

VK_NUMPAD9 69 Numeric keypad 9 key

Наверное NUMPAD8. Ну и если у меня Numlock отключен, тогда как?

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

40

Re: AHK: Настраиваемый макро менеджер

Можно добавить проверку статусов Num, Caps, scroll клавиш.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

41

Re: AHK: Настраиваемый макро менеджер

Alectric пишет:

Пробовал запускать пример отсюда - тоже-самое, вылетают все хоткеи других скриптов...

Не знаю, надо чтобы у кого то ещё такое было.

Можно добавить проверку статусов Num, Caps, scroll клавиш.

Куда?

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

42

Re: AHK: Настраиваемый макро менеджер

serzh82saratov пишет:

Куда?

В скрипт для ТС'а... куда-же еще.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

43

Re: AHK: Настраиваемый макро менеджер

Шикарно, первой строкой тогда надо.

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

44 (изменено: Alectric, 2015-11-28 14:47:06)

Re: AHK: Настраиваемый макро менеджер

Я уже совсем запутался в логике, но это работает:

#NoEnv
#SingleInstance Force


OnExit,GuiClose


key:={"":"Нет","vk01":"LButton","vk02":"RButton","vk04":"MButton","vk05":"X1Button","vk06":"X2Button","vk08":"BS"
,"vk09":"TAB","vk0D":"Enter","vk10":"Shift","vk11":"Ctrl","vk12":"Alt","vk13":"Pause","vk14":"Caps","vk1B":"Esc"
,"vk20":"Space","vk21":"PgUp","vk22":"PgDn","vk23":"End","vk24":"Home","vk25":"Left","vk26":"Up","vk27":"Right"
,"vk28":"Down","vk29":"Select","vk2A":"Print","vk2B":"Execute","vk2C":"PrScr","vk2D":"Ins","vk2E":"Del","vk2F":"Help"
,"vk30":"0","vk31":"1","vk32":"2","vk33":"3","vk34":"4","vk35":"5","vk36":"6","vk37":"7","vk38":"8","vk39":"9"
,"vk41":"A","vk42":"B","vk43":"C","vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q","vk52":"R","vk53":"S","vk54":"T"
,"vk55":"U","vk56":"V","vk57":"W","vk58":"X","vk59":"Y","vk5A":"Z","vk5B":"LWin","vk5C":"RWin","vk5D":"App"
,"vk60":"numpad0","vk61":"numpad1","vk62":"numpad2","vk63":"numpad3","vk64":"numpad4","vk65":"numpad5","vk66":"numpad6"
,"vk67":"numpad7","vk68":"numpad8","vk69":"numpad9","vk6A":"*","vk6B":"+","vk6D":"-","vk6E":"Dec","vk6F":"/"
,"vk70":"F1","vk71":"F2","vk72":"F3","vk73":"F4","vk74":"F5","vk75":"F6","vk76":"F7","vk77":"F8","vk78":"F9"
,"vk79":"F10","vk7A":"F11","vk7B":"F12","vk90":"NumLck","vk91":"ScrLck","vkAD":"Vol Mute","vkAE":"Vol Down"
,"vkAF":"Vol Up","vkB0":"Next Track","vkB1":"Previous Track","vkB3":"Play/Pause Media"}

vkod:={"Нет":"","LButton":"vk01","RButton":"vk02","MButton":"vk04","X1Button":"vk05","X2Button":"vk06","BS":"vk08"
,"TAB":"vk09","Enter":"vk0D","Shift":"vk10","Ctrl":"vk11","Alt":"vk12","Pause":"vk13","Caps":"vk14","Esc":"vk1B"
,"Space":"vk20","PgUp":"vk21","PgDn":"vk22","End":"vk23","Home":"vk24","Left":"vk25","Up":"vk26","Right":"vk27"
,"Down":"vk28","Select":"vk29","Print":"vk2A","Execute":"vk2B","PrScr":"vk2C","Ins":"vk2D","Del":"vk2E","Help":"vk2F"
,"0":"vk30","1":"vk31","2":"vk32","3":"vk33","4":"vk34","5":"vk35","6":"vk36","7":"vk37","8":"vk38","9":"vk39"
,"A":"vk41","B":"vk42","C":"vk43","D":"vk44","E":"vk45","F":"vk46","G":"vk47","H":"vk48","I":"vk49","J":"vk4A"
,"K":"vk4B","L":"vk4C","M":"vk4D","N":"vk4E","O":"vk4F","P":"vk50","Q":"vk51","R":"vk52","S":"vk53","T":"vk54"
,"U":"vk55","V":"vk56","W":"vk57","X":"vk58","Y":"vk59","Z":"vk5A","LWin":"vk5B","RWin":"vk5C","App":"vk5D"
,"numpad0":"vk60","numpad1":"vk61","numpad2":"vk62","numpad3":"vk63","numpad4":"vk64","numpad5":"vk65","numpad6":"vk66"
,"numpad7":"vk67","numpad8":"vk68","numpad9":"vk69","*":"vk6A","+":"vk6B","-":"vk6D","Dec":"vk6E","/":"vk6F"
,"F1":"vk70","F2":"vk71","F3":"vk72","F4":"vk73","F5":"vk74","F6":"vk75","F7":"vk76","F8":"vk77","F9":"vk78"
,"F10":"vk79","F11":"vk7A","F12":"vk7B","NumLck":"vk90","ScrLck":"vk91","Vol Mute":"vkAD","Vol Down":"vkAE"
,"Vol Up":"vkAF","Next Track":"vkB0","Previous Track":"vkB1","Play/Pause Media":"vkB3"}

List=Нет|0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|LButton|RButton|MButton|X1Button|X2Button|BS|TAB|Enter|Shift|Ctrl|Alt|Pause|Caps|Esc|Space|PgUp|PgDn|End|Home|Left|Up|Right|Down|Select|Print|Execute|PrScr|Ins|Del|Help|LWin|RWin|App|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|*|+|-|Dec|/|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|NumLck|ScrLck|Vol Mute|Vol Down|Vol Up|Next Track|Previous Track|Play/Pause Media

state:={"numpad0":"numpadins"
,"numpad1":"numpadend"
,"numpad2":"numpaddown"
,"numpad3":"numpadpgdn"
,"numpad4":"numpadleft"
,"numpad5":"numpadclear"
,"numpad6":"numpadright"
,"numpad7":"numpadhome"
,"numpad8":"numpadup"
,"numpad9":"numpadpgup"}



menu,menu,add,Удалить,Delet


Gui, Font, s10 Bold, Cambria

Gui, Add, Text, xm ym cBlue ,Клавиша управления:
Gui,Add,ComboBox,xp y+5 w150 v_Main,%List%
Gui,Add,CheckBox,x+10 yp+3 Checked gsubmit vLoop,Зациклить

Gui,Add,CheckBox,xm y+10 gsubmit vChekState,Учитывать статус доп. кнопок:

Gui,Add,CheckBox,xm+10 y+8 gsubmit vNumlockState,NumLock:
Gui, Add, Radio, x+5 yp Checked gsubmit vNumLockGroup,Вкл
Gui, Add, Radio, x+5 yp gsubmit ,Выкл

Gui,Add,CheckBox,xm+10 y+8 gsubmit vCapsLockState,CapsLock:
Gui, Add, Radio, x+5 yp Checked gsubmit Group vCapsLockGroup,Вкл
Gui, Add, Radio, x+5 yp gsubmit,Выкл

Gui,Add,CheckBox,xm+10 y+8 gsubmit vScrollLockState,ScrollLock:
Gui, Add, Radio, x+5 yp Checked gsubmit Group vScrollLockGroup,Вкл
Gui, Add, Radio, x+5 yp gsubmit,Выкл

Gui, Add, Text, xm y+15 cBlue,Добавить клавишу :
Gui,Add,ComboBox,xp y+5 w100 v_key,%List%
Gui, Add, Button, x+10 yp w80 h20 g_Down, Нажать ;
Gui, Add, Button, x+1 yp w80 h20 g_Up, Отпустить ;

Gui, Add, Text, xm y+15 cBlue,Задержка в милесекундах :
Gui, Add, Edit, xm y+5  w100 cRed  vSleep, 65
Gui, Add, Button, x+10 yp w80 h20 g_Sleep, Добавить

Gui, Add, Button,xm y+15 w100 h20 gOpen, Открыть
Gui, Add, Button, xm y+5 w100 h20 gSaves, Сохранить
Gui, Add, Button, xm+100 y+5 w100 h20 gStart, Запустить
Gui, Add, Button, xm+100 y+5 w100 h20 gStop, Остановить

Gui, Add, Listview, xm+300 ym w490 h380 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение|VK

Gui, Show

loop
{
  sleep,100
;  tooltip,% a_tickcount "`ntest",,,5
;
;TOOLTIP,% NumLockGroup "`n" CapsLockGroup "`n" ScrollLockGroup
  if ChekState
  {
    NS:=getkeystate("vk90","T")
    CS:=getkeystate("vk14","T")
    SS:=getkeystate("vk91","T")
    Nw:=NumlockState ? ((NS and NumLockGroup=1) or (!NS and NumLockGroup=2)) : ""
    CW:=CapsLockState ? ((CS and CapsLockGroup=1) or (!CS and CapsLockGroup=2)) : ""
    SW:=ScrollLockState ? ((SS and ScrollLockGroup=1) or (!SS and ScrollLockGroup=2)) : ""
    WW:=((NW="" ? 1 : NW) and (CW="" ? 1 : CW) and (SW="" ? 1 : SW))
  }
  else
    WW=1
;tooltip,% NumlockState " " NW "`n" CapsLockState " " CW "`n" ScrollLockState " " SW "`n`n" WW "`t" W "`t" WWW
}
Return

submit:
Gui Submit, NoHide
if ChekState
  work=
return

Listview:
if A_GuiEvent=RightClick
{
  if selected:=A_EventInfo
    menu,menu,show
}
else if A_GuiEvent=D
{
  mousegetpos,,MenuY
  keywait,lbutton,L
  mousegetpos,,MenuYY
  LV_GetText(tmp_action,A_EventInfo,1)
  LV_GetText(tmp_value,A_EventInfo,2)
  LV_GetText(tmp_vk,A_EventInfo,3)
  if (MenuY>MenuYY and A_EventInfo>1)
    RowNumb:=A_EventInfo-1
  else if (A_EventInfo<LV_GetCount())
    RowNumb:=A_EventInfo+1
  LV_GetText(tmp2_action,RowNumb,1)
  LV_GetText(tmp2_value,RowNumb,2)
  LV_GetText(tmp2_vk,RowNumb,3)
  LV_Modify(A_EventInfo,,tmp2_action,tmp2_value,tmp2_vk)
  LV_Modify(RowNumb,,tmp_action,tmp_value,tmp_vk)
}
return
Delet:
LV_Delete(selected)
return

_Down:
Gui Submit, NoHide
if (_key="Нет")
  return
LV_Add(,"Нажатие",_key,vkod["" _key ""])
return

_Up:
Gui Submit, NoHide
if (_key="Нет")
  return
LV_Add(,"Отпускание",_key,vkod["" _key ""])
return

_Sleep:
Gui Submit, NoHide
LV_Add(,"Задержка",Sleep)
return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
if !instr(SelectedFile,".ini")
  SelectedFile.=".ini"
IniWrite, %_main%, %SelectedFile%,main,main
IniWrite, %Loop%, %SelectedFile%,main,Loop
IniWrite, %ChekState%, %SelectedFile%,main,ChekState
IniWrite, %NumlockState%, %SelectedFile%,main,NumlockState
IniWrite, %CapsLockState%, %SelectedFile%,main,CapsLockState
IniWrite, %ScrollLockState%, %SelectedFile%,main,ScrollLockState
IniWrite, %NumLockGroup%, %SelectedFile%,main,NumLockGroup
IniWrite, %CapsLockGroup%, %SelectedFile%,main,CapsLockGroup
IniWrite, %ScrollLockGroup%, %SelectedFile%,main,ScrollLockGroup
IniWrite, % LV_GetCount(), %SelectedFile%,main,count
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)
  IniWrite, %action%, %SelectedFile%,data,action%A_Index%
  IniWrite, %value%, %SelectedFile%,data,value%A_Index%
  IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
}
Return

Open:
Gui Submit, NoHide
FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
if ErrorLevel
  return
LV_Delete()
IniRead, Loop, %SelectedFile%,main,Loop
IniRead, ChekState, %SelectedFile%,main,ChekState
IniRead, NumlockState, %SelectedFile%,main,NumlockState
IniRead, CapsLockState, %SelectedFile%,main,CapsLockState
IniRead, ScrollLockState, %SelectedFile%,main,ScrollLockState
IniRead, NumLockGroup, %SelectedFile%,main,NumLockGroup
IniRead, CapsLockGroup, %SelectedFile%,main,CapsLockGroup
IniRead, ScrollLockGroup, %SelectedFile%,main,ScrollLockGroup
GuiControl,,Loop,%Loop%
GuiControl,,ChekState,% ChekState
GuiControl,,NumlockState,% NumlockState
GuiControl,,CapsLockState,% CapsLockState
GuiControl,,ScrollLockState,% ScrollLockState
GuiControl,,% NumLockGroup=1 ? "button4" : "button5",1
GuiControl,,% CapsLockGroup=1 ? "button7" : "button8",1
GuiControl,,% ScrollLockGroup=1 ? "button10" : "button11",1
IniRead,main,%SelectedFile%,main,main
Control,ChooseString,% main,ComboBox1
IniRead,count,%SelectedFile%,main,count
loop,% count
{
  IniRead,action,%SelectedFile%,data,action%A_Index%
  IniRead,value,%SelectedFile%,data,value%A_Index%
  IniRead,vk,%SelectedFile%,data,vk%A_Index%
  if (action="Задержка")
    LV_Add(,"Задержка",value)
  else if (action="Нажатие")
    LV_Add(,"Нажатие",value,vk)
  else if (action="Отпускание")
    LV_Add(,"Отпускание",value,vk)
}
Return

Start:
Gui Submit, NoHide
act:=LV_GetCount()
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)

  if (action="Задержка")
  {
    act%A_Index%:="sleep"
    val%A_Index%:=value
  }
  else if (action="Нажатие")
  {
    act%A_Index%:="key"
    val%A_Index%:=vk " down"
  }
  else if (action="Отпускание")
  {
    act%A_Index%:="key"
    val%A_Index%:=vk " up"
  }
}

if (_main and LV_GetCount())
{
  if tmp:=state["" _main ""]
    _main:=tmp
;tooltip,% a_tickcount "`n" _main,,,2
  Hotkey, % "$" _main, HKLabel,UseErrorLevel
  tooltip,Запущено.
  sleep,1000
  tooltip
}
else
  msgbox,Ничего нет.
;msgbox,% vkod[_main]"`n" _main
Return

Stop:
if _main
{
  Hotkey, % "$" _main, HKLabel, Off UseErrorLevel
  tooltip,Остановлено.
  sleep,1000
  tooltip
}
return

GuiClose:
ExitApp

#if WW

HKLabel:
key:=regexreplace(a_thishotkey,"\$?(.*)","$1")
;tooltip,% key
while GetKeyState(key,"P")
{
  loop,% act
  {
;tooltip,% "Debug`n" val%A_Index% ; для отладки, можно удалить.
    if (act%A_Index%="sleep")
      sleep,% val%A_Index%
    else if (act%A_Index%="key")
      send,% "{" val%A_Index% "}"
  }
  if !Loop
    break
}
Return

Ядрён, все я устал, дальше - справка тебе в помощь.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

45 (изменено: Ядрён, 2015-11-29 06:56:44)

Re: AHK: Настраиваемый макро менеджер

Alectric Огромное вам спасибо за ващи труды . Только осталось 2 вопроса , как нажимаются кнопки,(тут ведь нет команд "Send"  или DllCall("mouse_event" ) и как бы сделать сохранение нескольких профилей . И отдельное спасибо вам serzh82saratov за идею с хоткеями . И как можно стереть всё поле "Listview" сразу по кнопке. Или добавить пункт в меню удалить всё.



#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force



OnExit("GuiClose")
menu,menu,add,Удалить,Delet
Hotkey_Option("MLRES")

Gui,Font, s10 Bold, Cambria
Gui, Add, Text, cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY hwndh2, % Hotkey_Set("B2")
Gui, Add, Text, cBlue ,Нажмите клавишу :
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue ,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep , 65 
Gui, Add, Button, x130 y137 w70 h20 hwndh4 gSleepr, Добавить
Gui, Add, Button,x20 y170 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y200 w100 h20 gSaves, сохранить
Gui, Add, Button, x20 y230 w100 h20 gwrite, Записать
Gui, Add, Listview, x300 y100 w490 h480 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение|VK
GuiControl, Focus, Text
Hotkey_Register({"B1":h1, "B2":h2})
Gui, Show,,
Return

Listview:
if A_GuiEvent=RightClick
{
  if selected:=A_EventInfo
    menu,menu,show
}
else if A_GuiEvent=D
{
  mousegetpos,,MenuY
  keywait,lbutton,L
  mousegetpos,,MenuYY
  LV_GetText(tmp_action,A_EventInfo,1)
  LV_GetText(tmp_value,A_EventInfo,2)
  LV_GetText(tmp_vk,A_EventInfo,3)
  if (MenuY>MenuYY and A_EventInfo>1)
    RowNumb:=A_EventInfo-1
  else if (A_EventInfo<LV_GetCount())
    RowNumb:=A_EventInfo+1
  LV_GetText(tmp2_action,RowNumb,1)
  LV_GetText(tmp2_value,RowNumb,2)
  LV_GetText(tmp2_vk,RowNumb,3)
  LV_Modify(A_EventInfo,,tmp2_action,tmp2_value,tmp2_vk)
  LV_Modify(RowNumb,,tmp_action,tmp_value,tmp_vk)
}
return
Delet:
LV_Delete(selected)
return

~vk79::
Suspend, Off
ExitApp
return

Saves:
Gui Submit, NoHide
FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
if !instr(SelectedFile,".ini")
  SelectedFile.=".ini"
IniWrite, %KY%, %SelectedFile%,KY,KY
IniWrite, % LV_GetCount(), %SelectedFile%,KY,count
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)
  IniWrite, %action%, %SelectedFile%,data,action%A_Index%
  IniWrite, %value%, %SelectedFile%,data,value%A_Index%
  IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
}

Return

Open:
Gui Submit, NoHide
FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
if ErrorLevel
  return
LV_Delete()
IniRead,KY,%SelectedFile%,KY,KY
Control,ChooseString,% KY,Edit1
IniRead,count,%SelectedFile%,KY,count
loop,% count
{
  IniRead,action,%SelectedFile%,data,action%A_Index%
  IniRead,value,%SelectedFile%,data,value%A_Index%
  IniRead,vk,%SelectedFile%,data,vk%A_Index%
  if (action="Задержка")
    LV_Add(,"Задержка",value)
  else if (action="Нажатие")
    LV_Add(,"Нажатие",value,vk)
  else if (action="Отпускание")
    LV_Add(,"Отпускание",value,vk)
}
GuiControl,, KY, % KY
Return

keys:
Gui Submit, NoHide
Vitkode := Format("{:#x}", GetKeyVK(Kl))
LV_Add(,"Нажатие",Kl,Vitkode)
LV_Add(,"Задержка",Sleep)
Vitkode := Format("{:#x}", GetKeyVK(Kl))
LV_Add(,"Отпускание",Kl,Vitkode)
LV_Add(,"Задержка",Sleep)
Return

Sleepr:
Gui Submit, NoHide
LV_Add(,"Задержка",Sleep)
Return

write:
Gui Submit, NoHide
act:=LV_GetCount()
Loop % LV_GetCount()
{
  LV_GetText(action,A_Index,1)
  LV_GetText(value,A_Index,2)
  LV_GetText(vk,A_Index,3)

  if (action="Задержка")
  {
    act%A_Index%:="sleep"
    val%A_Index%:=value
  }
  else if (action="Нажатие")
  {
    act%A_Index%:="key"
    val%A_Index%:=value " down"
  }
  else if (action="Отпускание")
  {
    act%A_Index%:="key"
    val%A_Index%:=value " up"
  }
}

Hotkey, %  "$" Hotkey, HKLabel, Off UseErrorLevel
Hotkey := Hotkey_ValueFromName("B2")
Hotkey, % "$" Hotkey, HKLabel, On
VK := Format("{:#x}", GetKeyVK(Hotkey_ValueFromName("B1")))
Return

HKLabel:
while GetKeyState(Hotkey,"P")
{
  loop,% act
  {
;tooltip,% val%A_Index% ; для отладки, можно удалить.
    if (act%A_Index%="sleep")
      sleep,% val%A_Index%
    else if (act%A_Index%="key")
      send,% "{" val%A_Index% "}"
  }
}
Return

GuiClose() {
    Hotkey_Exit()
    ExitApp
}

               ;  http://forum.script-coding.com/viewtopic.php?pid=72549#p72549

Hotkey_Register(Controls) {
	Static IsStart
	Local Name, Handle
	For Name, Handle in Controls
	{
		Hotkey_Controls("Name", Handle, Name)
		Hotkey_Controls("HwndFromName", Name, Handle)
		GuiControl, +ReadOnly, % Handle
	}
	If IsStart
		Return
	#HotkeyInterval 0
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback("Hotkey_WinEvent", "F"), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	Hotkey_Arr("hHook", Hotkey_SetWindowsHookEx()), Hotkey_RButton()
	Return IsStart := 1
}

Hotkey_Main(Param1, Param2=0) {
	Static OnlyMods, ControlHandle, Hotkey, KeyName, K := {}
	, Prefix := {"LAlt":"<!","LCtrl":"<^","LShift":"<+","LWin":"<#"
				,"RAlt":">!","RCtrl":">^","RShift":">+","RWin":">#"
				,"Alt":"!","Ctrl":"^","Shift":"+","Win":"#"}
 	, Symbols := "|vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|"
				. "vk43|vk44|vk45|vk46|vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|"
				. "vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A|"
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local IsMod, Text

	If Param1 = GetMod
		Return K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	If Param1 = Control
	{
		If Param2
		{
			If OnlyMods
			{
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
				OnlyMods := 0, K := {}
			}
			ControlHandle := Param2
			If !Hotkey_Arr("Hook")
				Hotkey_Arr("Hook", 1)
			PostMessage, 0x00B1, -1, -1, , ahk_id %ControlHandle%   ;  EM_SETSEL
		}
		Else If Hotkey_Arr("Hook")
		{
			Hotkey_Arr("Hook", 0), K := {}
			If OnlyMods
				SendMessage, 0xC, 0, "" Hotkey_Arr("Empty"), , ahk_id %ControlHandle%
			SetTimer, Hotkey_IsRegFocus, -200
		}
		Return 1
	}
	If Param1 = Mod
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		If (K["M" IsMod] != "")
			Return 1
		K["M" IsMod] := IsMod "+", K["P" IsMod] := Prefix[IsMod]
	}
	Else If Param1 = ModUp
	{
		IsMod := Hotkey_Arr("LRMods") ? Param2 : SubStr(Param2, 2)
		K["M" IsMod] := "", K["P" IsMod] := ""
		If (Hotkey != "")
			Return 1
	}
	(IsMod) ? (KeyName := Hotkey := K.Prefix := "", OnlyMods := 1)
	: (KeyName := GetKeyName(Param1 Param2), OnlyMods := 0
	, (StrLen(KeyName) = 1 ? (KeyName := Format("{:U}", KeyName)) : 0)
	, Hotkey := InStr(Symbols, "|" Param1 "|") ? Param1 : KeyName
	, KeyName := Hotkey = "vkBF" ? "/" : KeyName
	, (Hotkey_Arr("OnlyEngSym") && Hotkey != KeyName ? (KeyName := EngSym[Param1]) : 0)
	, K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin)
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName = "" ? Hotkey_Arr("Empty") : K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return 1

Hotkey_PressName:
	KeyName := Hotkey := A_ThisHotkey, OnlyMods := 0
	K.Prefix := K.PLCtrl K.PRCtrl K.PLAlt K.PRAlt K.PLShift K.PRShift K.PLWin K.PRWin K.PCtrl K.PAlt K.PShift K.PWin
	Hotkey_Controls("ValueFromName", Hotkey_Name(ControlHandle), K.Prefix Hotkey)
	Hotkey_Controls("Value", ControlHandle, K.Prefix Hotkey)
	K.Mods := K.MLCtrl K.MRCtrl K.MLAlt K.MRAlt K.MLShift K.MRShift K.MLWin K.MRWin K.MCtrl K.MAlt K.MShift K.MWin
	Text := K.Mods KeyName
	SendMessage, 0xC, 0, &Text, , ahk_id %ControlHandle%
	Return
}

Hotkey_LowLevelKeyboardProc(nCode, wParam, lParam) {
	Static Mods := {"vkA4":"LAlt","vkA5":"RAlt","vkA2":"LCtrl","vkA3":"RCtrl"
		,"vkA0":"LShift","vkA1":"RShift","vk5B":"LWin","vk5C":"RWin"}
		, oMem := [], HEAP_ZERO_MEMORY := 0x8, Size := 16, hHeap := DllCall("GetProcessHeap", "Ptr")
	Local pHeap, Wp, Lp, Ext, VK, SC, IsMod
	Critical

	If !Hotkey_Arr("Hook")
		Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam)
	pHeap := DllCall("HeapAlloc", "Ptr", hHeap, "UInt", HEAP_ZERO_MEMORY, "Ptr", Size, "Ptr")
	DllCall("RtlMoveMemory", "Ptr", pHeap, "Ptr", lParam, "Ptr", Size), oMem.Push([wParam, pHeap])
	SetTimer, Hotkey_LLKPWork, -10
	Return nCode < 0 ? DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "UInt", wParam, "UInt", lParam) : 1

	Hotkey_LLKPWork:
		While (oMem[1] != "")
		{
			IF Hotkey_Arr("Hook")
			{
				Wp := oMem[1][1], Lp := oMem[1][2]
				VK := Format("vk{:X}", NumGet(Lp + 0, "UInt"))
				Ext := NumGet(Lp + 0, 8, "UInt")
				SC := Format("sc{:X}", (Ext & 1) << 8 | NumGet(Lp + 0, 4, "UInt"))
				If !Hotkey_Arr("SingleKey")
					IsMod := Mods[VK]
				If (Wp = 0x100 || Wp = 0x104)		;  WM_KEYDOWN := 0x100, WM_SYSKEYDOWN := 0x104
					IsMod ? Hotkey_Main("Mod", IsMod) : Hotkey_Main(VK, SC)
				Else IF ((Wp = 0x101 || Wp = 0x105) && VK != "vk5D")   ;  WM_KEYUP := 0x101, WM_SYSKEYUP := 0x105, AppsKey = "vk5D"
					IsMod ? Hotkey_Main("ModUp", IsMod) : 0
			}
			DllCall("HeapFree", "Ptr", hHeap, "UInt", 0, "Ptr", Lp)
			oMem.RemoveAt(1)
		}
		Return
}

Hotkey_Option(Options) {
	Local S_FormatInteger, MouseKey
	#IF Hotkey_Arr("Hook")
	#IF Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
	#IF Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
	#IF Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
	#IF
	IfInString, Options, M
	{
		MouseKey := "MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2"
		Hotkey, IF, Hotkey_Arr("Hook")
		Loop, Parse, MouseKey, |
			Hotkey, %A_LoopField%, Hotkey_PressName
	}
	IfInString, Options, L
	{
		IfInString, Options, S
			Hotkey, IF, Hotkey_Arr("Hook") && Hotkey_GetKeyState("RButton")
		Else
			Hotkey, IF, Hotkey_Arr("Hook") && (Hotkey_GetKeyState("RButton") || Hotkey_Main("GetMod"))
		Hotkey, LButton, Hotkey_PressName
	}
	IfInString, Options, R
	{
		Hotkey, IF, Hotkey_Arr("Hook")
		Hotkey, RButton, Hotkey_PressName
		Hotkey_Arr("SetRButton", 1)
	}
	IfInString, Options, J
	{
		S_FormatInteger := A_FormatInteger
		SetFormat, IntegerFast, D
		Hotkey, IF, Hotkey_Arr("Hook") && !Hotkey_Main("GetMod")
		Loop, 128
			Hotkey % Ceil(A_Index/32) "Joy" Mod(A_Index-1,32)+1, Hotkey_PressName
		SetFormat, IntegerFast, %S_FormatInteger%
	}
	IfInString, Options, S
		Hotkey_Arr("SingleKey", 1)
	IfInString, Options, H
		Hotkey_Arr("LRMods", 1)
	IfInString, Options, E
		Hotkey_Arr("OnlyEngSym", 1)
	Hotkey, IF
}

Hotkey_RButton() {
	#IF Hotkey_IsRegControl()
	#IF
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton Up, Hotkey_RButton
	Hotkey, IF
	Return

	Hotkey_RButton:
		Return
}

Hotkey_GetKeyState(Button) {
	Return GetKeyState(Button, "P")
}

Hotkey_IsRegControl() {
	Local Control
	MouseGetPos,,,, Control, 2
	Return Hotkey_Name(Control) != ""
}

Hotkey_IsRegFocus() {
	Local ControlNN, hFocus
	WinExist("A")
	ControlGetFocus, ControlNN
	ControlGet, hFocus, Hwnd, , %ControlNN%
	Hotkey_Name(hFocus) != "" ? Hotkey_Arr("Hook", 1) : 0
}

Hotkey_WinEvent(hWinEventHook, event, hwnd) {
	Hotkey_Name(hwnd) != "" ? Hotkey_Main("Control", hwnd) : Hotkey_Main("Control")
}

Hotkey_SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) {
	Return DllCall("SetWinEventHook" , "UInt", eventMin, "UInt", eventMax, "Ptr", hmodWinEventProc
			, "Ptr", lpfnWinEventProc, "UInt", idProcess, "UInt", idThread, "UInt", dwFlags, "Ptr")
}

Hotkey_SetWindowsHookEx() {
	Return DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
		, "Int", 13   ;  WH_KEYBOARD_LL := 13
		, "Ptr", RegisterCallback("Hotkey_LowLevelKeyboardProc", "Fast")
		, "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
		, "UInt", 0, "Ptr")
}

Hotkey_Exit() {
	DllCall("UnhookWindowsHookEx", "Ptr", Hotkey_Arr("hHook"))
}

	; -------------------------------------- Save and get variables --------------------------------------

Hotkey_Arr(P*) {
	Static Arr := {Empty:"Нет"}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : (Arr[P[1]] := P[2])
}

Hotkey_Controls(Type, P*) {
	Static ArrName := [], ArrValue := [], ArrValueFromName := {}, ArrHwndFromName := []
	Return P.MaxIndex() = 1 ? Arr%Type%[P[1]] : (Arr%Type%[P[1]] := P[2])
}

Hotkey_Name(Hwnd) {
	Return Hotkey_Controls("Name", Hwnd)
}

Hotkey_Value(Hwnd) {
	Return Hotkey_Controls("Value", Hwnd)
}

Hotkey_ValueFromName(Name) {
	Return Hotkey_Controls("ValueFromName", Name)
}

Hotkey_HwndFromName(Name) {
	Return Hotkey_Controls("HwndFromName", Name)
}

Hotkey_IniPath(Path = "") {
	Return Path = "" ? Hotkey_Arr("IniPath") : Hotkey_Arr("IniPath", Path)
}

Hotkey_IniSection(Section = "") {
	Return Section = "" ? Hotkey_Arr("IniSection") : Hotkey_Arr("IniSection", Section)
}

Hotkey_Set(Name, Value="") {
	Hotkey_Controls("ValueFromName", Name, Value)
	Return Hotkey_HKToStr(Value)
}

Hotkey_IniWrite(Hwnd, Section = "", FilePath = "") {
	IniWrite, % Hotkey_Value(Hwnd), % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Hotkey_Name(Hwnd)
}

	; -------------------------------------- Read and format --------------------------------------

Hotkey_Read(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Hotkey_HKToStr(Data), Hotkey_Controls("ValueFromName", Key, Data)
}

Hotkey_IniRead(Key, Section = "", FilePath = "") {
	Local Data
	IniRead, Data, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	Return Data
}

Hotkey_HKToStr(Key) {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","Ctrl"],["!","Alt"],["+","Shift"],["#","Win"]]
	, EngSym := {"vkBB":"=","vkBC":",","vkBD":"-","vkBE":".","vkBF":"/","vkC0":"``","vkBA":"`;"
				,"vkDB":"[","vkDC":"\","vkDD":"]","vkDE":"'","vk41":"A","vk42":"B","vk43":"C"
				,"vk44":"D","vk45":"E","vk46":"F","vk47":"G","vk48":"H","vk49":"I","vk4A":"J"
				,"vk4B":"K","vk4C":"L","vk4D":"M","vk4E":"N","vk4F":"O","vk50":"P","vk51":"Q"
				,"vk52":"R","vk53":"S","vk54":"T","vk55":"U","vk56":"V","vk57":"W","vk58":"X"
				,"vk59":"Y","vk5A":"Z"}
	Local K, K1, K2, I, V, M, R
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K2 = "")
		Return "" Hotkey_Arr("Empty")
	If K2 ~= "^vk"
		K2 := K2 = "vkBF" ? "/" : (Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : Format("{:U}", GetKeyName(K2)))
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M .= V[2] "+") : 0
	Return M . K2
}

Hotkey_HKToSend(Key, Section = "", FilePath = "") {
	Static LRPrefix := [["<^","LCtrl"],[">^","RCtrl"],["<!","LAlt"],[">!","RAlt"]
					,["<+","LShift"],[">+","RShift"],["<#","LWin"],[">#","RWin"]]
	, Prefix := [["^","LCtrl"],["!","LAlt"],["+","LShift"],["#","LWin"]]
	Local K, K1, K2, I, V, M1, M2, R
	If (Section != "")
		IniRead, Key, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Key, % A_Space
	If (Key = "")
		Return
	RegExMatch(Key, "S)^([\^\+!#<>]*)\{?(.*?)}?$", K)
	If (K1 != "")
		For I, V in K1 ~= "[<>]" ? LRPrefix : Prefix
			K1 := RegExReplace(K1, "\Q" V[1] "\E", "", R)
			, R ? (M1 .= "{" V[2] " Down}", M2 .= "{" V[2] " Up}") : 0
	Return M1 . "{" K2 "}" . M2
}
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

46

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:

как нажимаются кнопки,(тут ведь нет команд "Send" 

А это что:

      send,% "{" val%A_Index% "}"
Ядрён пишет:

И как можно стереть всё поле "Listview" сразу по кнопке.

LV_Delete() - нужно справку читать.

Ядрён пишет:

нескольких профилей

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

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

47

Re: AHK: Настраиваемый макро менеджер

Если используете библиотеку, то не надо её приводить в коде. Я поправил код под актуальную версию, перекачайте файл. И немного привёл ваш код в порядок, если выкладываете на форуме, соблюдайте правила табуляции, иначе ничего неразберёшь.


#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force  
OnExit("GuiClose")
Hotkey_Arr("OnlyEngSym", True)
Menu, Menu, Add, Удалить, Delete 
Menu, Menu, Add, Удалить Всё, Delete_All

Gui, -DPIScale
Gui, Font, s10 Bold, Cambria
Gui, Add, Text, cBlue, Клавиша управления:
Gui, Add, Edit, w140 Center cRed vKY hwndh2, % Hotkey_Set("B2")
Gui, Add, Text, cBlue, Нажмите клавишу:
Gui, Add, Edit, w140 Center cRed vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue, Задержка миллисекундах:
Gui, Add, Edit, w100 cRed  vSleep, 65 
Gui, Add, Button, y+22 hwndh4 gSleepr, Добавить
Gui, Add, Button, gOpen, Открыть
Gui, Add, Button, gSaves, Сохранить
Gui, Add, Button, gWrite, Записать
Gui, Add, Listview, x300 y100 w490 h480 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение|VK
GuiControl, Focus, Sleep 
Hotkey_Register(["B1",h1,"KMLRJS"], ["B2",h2,"KMLRJS"])
Gui, Show 
Return

Listview:
	if A_GuiEvent=RightClick
	{
		if selected:=A_EventInfo
			menu,menu,show
	}
	else if A_GuiEvent=D
	{
		mousegetpos,,MenuY
		keywait,lbutton,L
		mousegetpos,,MenuYY
		LV_GetText(tmp_action,A_EventInfo,1)
		LV_GetText(tmp_value,A_EventInfo,2)
		LV_GetText(tmp_vk,A_EventInfo,3)
		if (MenuY>MenuYY and A_EventInfo>1)
		RowNumb:=A_EventInfo-1
		else if (A_EventInfo<LV_GetCount())
		RowNumb:=A_EventInfo+1
		LV_GetText(tmp2_action,RowNumb,1)
		LV_GetText(tmp2_value,RowNumb,2)
		LV_GetText(tmp2_vk,RowNumb,3)
		LV_Modify(A_EventInfo,,tmp2_action,tmp2_value,tmp2_vk)
		LV_Modify(RowNumb,,tmp_action,tmp_value,tmp_vk)
	}
	return
	
Delete:
	LV_Delete(selected)
	return
	
Delete_All:
	LV_Delete()
	return
	
~vk79::
	Suspend, Off
	ExitApp 

Saves:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
	if !instr(SelectedFile,".ini")
		SelectedFile.=".ini"
	IniWrite, %KY%, %SelectedFile%,KY,KY
	IniWrite, % LV_GetCount(), %SelectedFile%,KY,count
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)
		IniWrite, %action%, %SelectedFile%,data,action%A_Index%
		IniWrite, %value%, %SelectedFile%,data,value%A_Index%
		IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
	} 
	Return

Open:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
	if ErrorLevel
	  return
	LV_Delete()
	IniRead,KY,%SelectedFile%,KY,KY
	Control,ChooseString,% KY,Edit1
	IniRead,count,%SelectedFile%,KY,count
	loop,% count
	{
		IniRead,action,%SelectedFile%,data,action%A_Index%
		IniRead,value,%SelectedFile%,data,value%A_Index%
		IniRead,vk,%SelectedFile%,data,vk%A_Index%
		if (action="Задержка")
			LV_Add(,"Задержка",value)
		else if (action="Нажатие")
			LV_Add(,"Нажатие",value,vk)
		else if (action="Отпускание")
			LV_Add(,"Отпускание",value,vk)
	}
	GuiControl,, KY, % KY
	Return

keys:
	Gui Submit, NoHide
	Vitkode := Format("{:#x}", GetKeyVK(Kl))
	LV_Add(,"Нажатие",Kl,Vitkode)
	LV_Add(,"Задержка",Sleep)
	Vitkode := Format("{:#x}", GetKeyVK(Kl))
	LV_Add(,"Отпускание",Kl,Vitkode)
	LV_Add(,"Задержка",Sleep)
	Return

Sleepr:
	Gui Submit, NoHide
	LV_Add(,"Задержка",Sleep)
	Return

write:
	Gui Submit, NoHide
	act:=LV_GetCount()
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)

		if (action="Задержка")
		{
			act%A_Index%:="sleep"
			val%A_Index%:=value
		}
		else if (action="Нажатие")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " down"
		}
		else if (action="Отпускание")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " up"
		}
	} 
	Hotkey, %  "$" Hotkey, HKLabel, Off UseErrorLevel
	Hotkey := Hotkey_Value("B2")
	Hotkey, % "$" Hotkey, HKLabel, On
	VK := Format("{:#x}", GetKeyVK(Hotkey_Value("B1")))
	Return

HKLabel:
	while GetKeyState(Hotkey,"P")
	{
		loop,% act
		{
	;tooltip,% val%A_Index% ; для отладки, можно удалить.
		if (act%A_Index%="sleep")
			sleep,% val%A_Index%
		else if (act%A_Index%="key")
			send,% "{" val%A_Index% "}"
		}
	}
	Return

GuiClose() {
	Hotkey_Exit()
	ExitApp
}

Зачем использовать:

GuiControl,, KY, % KY

Если для этого есть Hotkey_Value?
Про "нескольких профилей" я не понял, собственно как и задачу всего скрипта в целом.

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

48 (изменено: Ядрён, 2015-11-29 18:48:51)

Re: AHK: Настраиваемый макро менеджер

serzh82saratov Ваш скрипт запускается с ошибкой .
http://s017.radikal.ru/i404/1511/4a/03d741d54d6at.jpg

А несколько профилей это несколько управляющих клавиш и каждая выполняет своё действие к примеру ( нажимаю 1 нажимается 2 и 3, нажимаю 4 нажимается 5 и 6 ) по нажатию клавиш к примеру 1 и 4 выполняются действия одновременно.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

49

Re: AHK: Настраиваемый макро менеджер

Alectric Спасибо за справку .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

50

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:

serzh82saratov Ваш скрипт запускается с ошибкой .

А это читали?

Если используете библиотеку, то не надо её приводить в коде. Я поправил код под актуальную версию, перекачайте файл.

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

51 (изменено: Ядрён, 2015-11-29 18:52:09)

Re: AHK: Настраиваемый макро менеджер

serzh82saratov Да я скачал и поместил в дирекцию "ahk".Так выбивает ошибку.

Hotkey_Arr("OnlyEngSym", True)
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

52

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:

поместил в дирекцию "ahk"

И в папку "Lib"?

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

53 (изменено: Ядрён, 2015-11-29 19:02:18)

Re: AHK: Настраиваемый макро менеджер

Нет не в папку "Lib" , но теперь всё работает.Спасибо вам serzh82saratov. А остальные библиотеки надо тоже ложить в папку "Lib"?

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

54

Re: AHK: Настраиваемый макро менеджер

serzh82saratov Правда теперь какая то ерунда с сохранением - открытием . Всё записывает в файл , открываеш всё на своём месте все циферки а вот работать не работает .
Выдаёт ошибку.

Hotkey, % "$" Hotkey, HKLabel, On
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

55

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:

А остальные библиотеки надо тоже ложить в папку "Lib"?

Да.

Ядрён пишет:

Выдаёт ошибку.

Значит в переменной Hotkey невалидное содержимое для назначения горячей клавиши.

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

56 (изменено: Ядрён, 2015-11-29 23:47:47)

Re: AHK: Настраиваемый макро менеджер

serzh82saratov Так то всё работает , только при сохранении - открытии а точнее  только  при открытии выдаёт эту ошибку.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

57

Re: AHK: Настраиваемый макро менеджер

Что значит при открытии, чего?

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

58

Re: AHK: Настраиваемый макро менеджер

serzh82saratov При нажатии на кнопку открыть(соответственно при выборе ранее сохранённого "ini" файла) , возникает такая ошибка.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

59

Re: AHK: Настраиваемый макро менеджер

Ядрён пишет:

При нажатии на кнопку открыть

А кто писал код открытия?

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

60

Re: AHK: Настраиваемый макро менеджер

serzh82saratov Не я , но я там чуток подправил.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

61

Re: AHK: Настраиваемый макро менеджер

То есть разговор про метку "Open" и ошибку с "Hotkey, % "$" Hotkey, HKLabel, On".

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

62 (изменено: Ядрён, 2015-12-17 02:03:38)

Re: AHK: Настраиваемый макро менеджер

Доброго времени суток . Подскажите пожалуйста как можно модифицировать несколько  клавиш . Что бы можно было изменять не одну клавшу а несколько.


#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force  
OnExit("GuiClose")
Hotkey_Arr("OnlyEngSym", True)
Menu, Menu, Add, Удалить, Delete 
Menu, Menu, Add, Удалить Всё, Delete_All

Gui, -DPIScale
Gui,Font, s10 Bold, Cambria
Gui, Add, Text, cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY hwndh2, % Hotkey_Set("B2")
Gui, Add, Text, cBlue ,Нажмите клавишу :
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue ,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep , 65 
Gui, Add, Button, x130 y137 w70 h20 hwndh4 gSleepr, Добавить
Gui, Add, Button,x20 y170 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y200 w100 h20 gSaves, сохранить
Gui, Add, Button, x20 y230 w100 h20 gwrite, Записать
Gui, Add, Listview, x300 y100 w490 h480 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение|VK
GuiControl, Focus, Sleep 
Hotkey_Register(["B1",h1,"KMLRJS"], ["B2",h2,"KMLRJS"])
Gui, Show 
Return

Listview:
	if A_GuiEvent=RightClick
	{
		if selected:=A_EventInfo
			menu,menu,show
	}
	else if A_GuiEvent=D
	{
		mousegetpos,,MenuY
		keywait,lbutton,L
		mousegetpos,,MenuYY
		LV_GetText(tmp_action,A_EventInfo,1)
		LV_GetText(tmp_value,A_EventInfo,2)
		LV_GetText(tmp_vk,A_EventInfo,3)
		if (MenuY>MenuYY and A_EventInfo>1)
		RowNumb:=A_EventInfo-1
		else if (A_EventInfo<LV_GetCount())
		RowNumb:=A_EventInfo+1
		LV_GetText(tmp2_action,RowNumb,1)
		LV_GetText(tmp2_value,RowNumb,2)
		LV_GetText(tmp2_vk,RowNumb,3)
		LV_Modify(A_EventInfo,,tmp2_action,tmp2_value,tmp2_vk)
		LV_Modify(RowNumb,,tmp_action,tmp_value,tmp_vk)
	}
	return
	
Delete:
	LV_Delete(selected)
	return
	
Delete_All:
	LV_Delete()
	return
	
~vk79::
	Suspend, Off
	ExitApp 
return

Saves:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
	if !instr(SelectedFile,".ini")
		SelectedFile.=".ini"
	IniWrite, %KY%, %SelectedFile%,KY,KY
	IniWrite, % LV_GetCount(), %SelectedFile%,KY,count
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)
		IniWrite, %action%, %SelectedFile%,data,action%A_Index%
		IniWrite, %value%, %SelectedFile%,data,value%A_Index%
		IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
	} 
	Return

Open:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
	if ErrorLevel
	  return
	LV_Delete()
	IniRead,KY,%SelectedFile%,KY,KY
	Control,ChooseString,% KY,Edit1
	IniRead,count,%SelectedFile%,KY,count
	loop,% count
	{
		IniRead,action,%SelectedFile%,data,action%A_Index%
		IniRead,value,%SelectedFile%,data,value%A_Index%
		IniRead,vk,%SelectedFile%,data,vk%A_Index%
		if (action="Задержка")
			LV_Add(,"Задержка",value)
		else if (action="Нажатие")
			LV_Add(,"Нажатие",value,vk)
		else if (action="Отпускание")
			LV_Add(,"Отпускание",value,vk)
	}
	GuiControl,, KY, % KY
	Return

keys:
	Gui Submit, NoHide
	Vitkode := Format("{:#x}", GetKeyVK(Kl))
	LV_Add(,"Нажатие",Kl,Vitkode)
	LV_Add(,"Задержка",Sleep)
	Vitkode := Format("{:#x}", GetKeyVK(Kl))
	LV_Add(,"Отпускание",Kl,Vitkode)
	LV_Add(,"Задержка",Sleep)
	Return

Sleepr:
	Gui Submit, NoHide
	LV_Add(,"Задержка",Sleep)
	Return

write:
	Gui Submit, NoHide
	act:=LV_GetCount()
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)

		if (action="Задержка")
		{
			act%A_Index%:="sleep"
			val%A_Index%:=value
		}
		else if (action="Нажатие")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " down"
		}
		else if (action="Отпускание")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " up"
		}
	} 
	Hotkey, %  "~" Hotkey, HKLabel, Off UseErrorLevel
	Hotkey := Hotkey_Value("B2")
	Hotkey, % "$" Hotkey, HKLabel, On
	VK := Format("{:#x}", GetKeyVK(Hotkey_Value("B1")))
	Return


HKLabel:

	while GetKeyState(Hotkey,"P")


	{
 
		loop,% act
		{
	        if (act%A_Index%="sleep")
			sleep,% val%A_Index%
		else if (act%A_Index%="key")
			sendevent,% "{" val%A_Index% "}"
		}

	}
	Return

GuiClose() {
	Hotkey_Exit()
	ExitApp
}

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

63

Re: AHK: Настраиваемый макро менеджер

Всё правильно serzh82saratov . Хотя это можно решить через костыль("ControlSend").

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

64

Re: AHK: Настраиваемый макро менеджер

Доброго времени суток. Подскажите пожалуйста как можно сделать зацикливание по метке "Checkbox". Так как показано в коде не работает.


#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#SingleInstance Force  
OnExit("GuiClose")
Hotkey_Arr("OnlyEngSym", True)
Menu, Menu, Add, Удалить, Delete 
Menu, Menu, Add, Удалить Всё, Delete_All

Gui, -DPIScale
Gui,Font, s10 Bold, Cambria
Gui, Add, Text, cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY  hwndh2 , % Hotkey_Set("B2")
Gui, Add, Text, cBlue ,Нажмите клавишу :
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue ,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep , 65 
Gui, Add, Button, x130 y137 w70 h20 hwndh4 gSleepr, Добавить
Gui, Add, Button,x20 y170 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y200 w100 h20 gSaves, сохранить
Gui, Add, Button, x20 y230 w100 h20 gwrite, Записать
Gui, Add, Checkbox, gLoopON, Loop
Gui, Add, Listview, x300 y100 w490 h480 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение
GuiControl, Focus, Sleep 
Hotkey_Register(["B1",h1,"KMLRJS"], ["B2",h2,"KMLRJS"])
Gui, Show 
Return



Listview:
	if A_GuiEvent=RightClick
	{
		if selected:=A_EventInfo
			menu,menu,show
	}
	else if A_GuiEvent=D
	{
		mousegetpos,,MenuY
		keywait,lbutton,L
		mousegetpos,,MenuYY
		LV_GetText(tmp_action,A_EventInfo,1)
		LV_GetText(tmp_value,A_EventInfo,2)
		LV_GetText(tmp_vk,A_EventInfo,3)
		if (MenuY>MenuYY and A_EventInfo>1)
		RowNumb:=A_EventInfo-1
		else if (A_EventInfo<LV_GetCount())
		RowNumb:=A_EventInfo+1
		LV_GetText(tmp2_action,RowNumb,1)
		LV_GetText(tmp2_value,RowNumb,2)
		LV_GetText(tmp2_vk,RowNumb,3)
		LV_Modify(A_EventInfo,,tmp2_action,tmp2_value,tmp2_vk)
		LV_Modify(RowNumb,,tmp_action,tmp_value,tmp_vk)
	}
	return
	
Delete:
	LV_Delete(selected)
	return
	
Delete_All:
	LV_Delete()
	return
	
~vk79::
	Suspend, Off
	ExitApp 
return

Saves:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
	if !instr(SelectedFile,".ini")
		SelectedFile.=".ini"
	IniWrite, %KY%, %SelectedFile%,KY,KY
	IniWrite, % LV_GetCount(), %SelectedFile%,KY,count
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)
		IniWrite, %action%, %SelectedFile%,data,action%A_Index%
		IniWrite, %value%, %SelectedFile%,data,value%A_Index%
		IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
	} 
	Return

Open:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
	if ErrorLevel
	  return
	LV_Delete()
	IniRead,KY,%SelectedFile%,KY,KY
	Control,ChooseString,% KY,Edit1
	IniRead,count,%SelectedFile%,KY,count
	loop,% count
	{


		IniRead,action,%SelectedFile%,data,action%A_Index%
		IniRead,value,%SelectedFile%,data,value%A_Index%
		IniRead,vk,%SelectedFile%,data,vk%A_Index%
		if (action="Задержка")
			LV_Add(,"Задержка",value)
		else if (action="Нажатие")
			LV_Add(,"Нажатие",value,vk)
		else if (action="Отпускание")
			LV_Add(,"Отпускание",value,vk)
	}
	GuiControl,, KY, % KY

         
	Return

keys:
	Gui Submit, NoHide
	LV_Add(,"Нажатие",Kl)
	LV_Add(,"Задержка",Sleep)
	LV_Add(,"Отпускание",Kl)
	LV_Add(,"Задержка",Sleep)
	Return

Sleepr:
	Gui Submit, NoHide
	LV_Add(,"Задержка",Sleep)
	Return

write:
act:=LV_GetCount()
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)

		if (action="Задержка")
		{
			act%A_Index%:="sleep"
			val%A_Index%:=value
		}
		else if (action="Нажатие")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " down"
		}
		else if (action="Отпускание")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " up"
		}
	} 

	HKLabel := Hotkey_Value("B2")
	Hotkey := Hotkey_Value("B2")
        Hotkey, % Hotkey, HKLabel, Off UseErrorLevel
	Hotkey, % Hotkey, HKLabel, On

        Return

LoopON:
LoopON := !LoopON

Return


HKLabel:


	while GetKeyState(Hotkey,"P")

Loop
	{

if LoopON
break

               loop,% act
              {

	        if (act%A_Index%="sleep")
			sleep,% val%A_Index%
		else if (act%A_Index%="key")
			sendevent,% "{" val%A_Index% "}"
		}

             }
 

	Return

GuiClose() {
	Hotkey_Exit()
	ExitApp
}

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

65

Re: AHK: Настраиваемый макро менеджер

Gui, Add, Checkbox, gLoopON vLoopON, Loop

LoopON:
	Gui Submit, NoHide
    Return

HKLabel:
	while (GetKeyState(Hotkey,"P") and LoopON)
...
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

66

Re: AHK: Настраиваемый макро менеджер

Alectric Так как предложили вы не работает .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

67

Re: AHK: Настраиваемый макро менеджер

Вообще вот так работает только не отключается цикл. Помогите не пойму в чём проблема. Нужно что бы с галочкой "Checkbox" (1 раз нажал на "Клавишу управления" цикл запустился, 2 раз  нажал цикл остановился). Без галочки "Checkbox" держишь "Клавишу управления" работает , отпустил не работает.


#NoEnv
#UseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 999
#MaxThreadsPerHotkey 2
#SingleInstance Force  
OnExit("GuiClose")
Hotkey_Arr("OnlyEngSym", True)
Menu, Menu, Add, Удалить, Delete 
Menu, Menu, Add, Удалить Всё, Delete_All

Gui, -DPIScale
Gui,Font, s10 Bold, Cambria
Gui, Add, Text, cBlue ,Клавиша управления:
Gui, Add, Edit, w100 cRed vKY  hwndh2 , % Hotkey_Set("B2")
Gui, Add, Text, cBlue ,Нажмите клавишу :
Gui, Add, Edit, w100 cRed  vKl gkeys hwndh1, % Hotkey_Set("B1")
Gui, Add, Text, cBlue ,Задержка милесекундах :
Gui, Add, Edit,  w100 cRed  vSleep , 65 
Gui, Add, Button, x130 y137 w70 h20 hwndh4 gSleepr, Добавить
Gui, Add, Button,x20 y170 w100 h20 gOpen, открыть
Gui, Add, Button, x20 y200 w100 h20 gSaves, сохранить
Gui, Add, Button, x20 y230 w100 h20 gwrite, Записать
Gui, Add, Checkbox,  gLoopON vLoopON, Loop
Gui, Add, Listview, x300 y100 w490 h480 cBlue AltSubmit gListview NoSortHdr -Multi,Действие|Значение
GuiControl, Focus, Sleep 
Hotkey_Register(["B1",h1,"KMLRJS"], ["B2",h2,"KMLRJS"])
Gui, Show 
Return



Listview:
	if A_GuiEvent=RightClick
	{
		if selected:=A_EventInfo
			menu,menu,show
	}
	else if A_GuiEvent=D
	{
		mousegetpos,,MenuY
		keywait,lbutton,L
		mousegetpos,,MenuYY
		LV_GetText(tmp_action,A_EventInfo,1)
		LV_GetText(tmp_value,A_EventInfo,2)
		LV_GetText(tmp_vk,A_EventInfo,3)
		if (MenuY>MenuYY and A_EventInfo>1)
		RowNumb:=A_EventInfo-1
		else if (A_EventInfo<LV_GetCount())
		RowNumb:=A_EventInfo+1
		LV_GetText(tmp2_action,RowNumb,1)
		LV_GetText(tmp2_value,RowNumb,2)
		LV_GetText(tmp2_vk,RowNumb,3)
		LV_Modify(A_EventInfo,,tmp2_action,tmp2_value,tmp2_vk)
		LV_Modify(RowNumb,,tmp_action,tmp_value,tmp_vk)
	}
	return
	
Delete:
	LV_Delete(selected)
	return
	
Delete_All:
	LV_Delete()
	return
	
~vk79::
	Suspend, Off
	ExitApp 
return

Saves:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, S24, , Сохранить макрос, *.ini
	if !instr(SelectedFile,".ini")
		SelectedFile.=".ini"
	IniWrite, %KY%, %SelectedFile%,KY,KY
	IniWrite, % LV_GetCount(), %SelectedFile%,KY,count
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)
		IniWrite, %action%, %SelectedFile%,data,action%A_Index%
		IniWrite, %value%, %SelectedFile%,data,value%A_Index%
		IniWrite, %vk%, %SelectedFile%,data,vk%A_Index%
	} 
	Return

Open:
	Gui Submit, NoHide
	FileSelectFile, SelectedFile, 24, , Загрузить макрос, *.ini
	if ErrorLevel
	  return
	LV_Delete()
	IniRead,KY,%SelectedFile%,KY,KY
	Control,ChooseString,% KY,Edit1
	IniRead,count,%SelectedFile%,KY,count
	loop,% count
	{


		IniRead,action,%SelectedFile%,data,action%A_Index%
		IniRead,value,%SelectedFile%,data,value%A_Index%
		IniRead,vk,%SelectedFile%,data,vk%A_Index%
		if (action="Задержка")
			LV_Add(,"Задержка",value)
		else if (action="Нажатие")
			LV_Add(,"Нажатие",value,vk)
		else if (action="Отпускание")
			LV_Add(,"Отпускание",value,vk)
	}
	GuiControl,, KY, % KY

         
	Return

keys:
	Gui Submit, NoHide
	LV_Add(,"Нажатие",Kl)
	LV_Add(,"Задержка",Sleep)
	LV_Add(,"Отпускание",Kl)
	LV_Add(,"Задержка",Sleep)
	Return

Sleepr:
	Gui Submit, NoHide
	LV_Add(,"Задержка",Sleep)
	Return

write:
Gui Submit, NoHide

act:=LV_GetCount()
	Loop % LV_GetCount()
	{
		LV_GetText(action,A_Index,1)
		LV_GetText(value,A_Index,2)
		LV_GetText(vk,A_Index,3)

		if (action="Задержка")
		{
			act%A_Index%:="sleep"
			val%A_Index%:=value
		}
		else if (action="Нажатие")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " down"
		}
		else if (action="Отпускание")
		{
			act%A_Index%:="key"
			val%A_Index%:=value " up"
		}
	} 

        Hotkey := Hotkey_Value("B2")
        Hotkey, % Hotkey, HKLabel, Off UseErrorLevel
	Hotkey, % Hotkey, HKLabel, On UseErrorLevel

        Return


LoopON:
	Gui Submit, NoHide
          HKLabel := !HKLabel
        Return


HKLabel:
       while (GetKeyState(Hotkey,"P") if HKLabel) 
       {
          loop, % act 
          {
            if (act%A_Index%="sleep")
			sleep,% val%A_Index%
               else if (act%A_Index%="key")
			sendevent,% "{" val%A_Index% "}"
               }

             }
Return



GuiClose() {
	Hotkey_Exit()
	ExitApp
}

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

68 (изменено: Alectric, 2015-12-21 16:05:44)

Re: AHK: Настраиваемый макро менеджер

Этот код лишний:

HKLabel := !HKLabel

Переключение происходит в переменной LoopON:
Checkbox

+ открыть спойлер

Если флажок установлен, то выходной переменной, ассоциированной с флажком (если таковая переменная существует), будет присвоено число 1, если снят - 0, а если элемент управления не определен/серый – число -1.

Gui, Add, Checkbox, gLoopON vLoopON, Loop

Сейчас я немного занят...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.