251

Re: AHK: Замена стандартного элемента управления "Hotkey"

Да, новая в первом посте, описание и примеры соответсвенно тоже.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

252 (изменено: serzh82saratov, 2018-08-11 19:25:18)

Re: AHK: Замена стандартного элемента управления "Hotkey"

Вообщем я всех запутал, новая теперь во втором посте как и положено.
http://forum.script-coding.com/viewtopi … 50#p127550

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

253

Re: AHK: Замена стандартного элемента управления "Hotkey"

Вопрос решён, но можно ли сделать, чтобы сразу при запуске строка была неактивна?

AutoHotkey - 1.1.29.01

254 (изменено: serzh82saratov, 2018-08-11 19:32:04)

Re: AHK: Замена стандартного элемента управления "Hotkey"

Можете перед показом окна вызвать:

ControlFocus, , % "ahk_id" Hotkey_Arr("Focus")[hwnd] 

hwnd - это хэндл окна.

#NoEnv
#SingleInstance Force
Gui, +AlwaysOnTop +HWNDhGui
Hotkey_Arr("KillFocus", true)
Hotkey_IniPath(A_ScriptDir "\Hotkey.ini"), Hotkey_IniSection("Hotkeys")
Hotkey_Add("w300", "MyHotkey1", "G1KD", "*", "Save")
Hotkey_Add("wp y+10", "MyHotkey2", "G1KMLRJ", "*", "Save")
Gui, Add, Edit, Center vText wp
ControlFocus, , % "ahk_id" Hotkey_Arr("Focus")[hGui] 
Gui, Show
Return

Save(Name) { 
    GuiControl, , Text, % Name " = " Hotkey_Write(Name)
}

GuiClose() {
    ExitApp
}
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

255

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov, Да, всё работает, спасибо!

AutoHotkey - 1.1.29.01

256 (изменено: serzh82saratov, 2018-08-11 20:43:33)

Re: AHK: Замена стандартного элемента управления "Hotkey"

Хотя управление фокусом давно надо было добавить, и вне зависимости от опции KillFocus, в новую версию добавил Hotkey_KillFocus(Name).
То есть перед Gui Show можно вызвать Hotkey_KillFocus с именем любого контрола в нужном окне.

#NoEnv
#SingleInstance Force
Gui, +AlwaysOnTop 
Hotkey_Arr("KillFocus", true)
Hotkey_IniPath(A_ScriptDir "\Hotkey.ini"), Hotkey_IniSection("Hotkeys")
Hotkey_Add("w300", "MyHotkey1", "G1KD", "*", "Save")
Hotkey_Add("wp y+10", "MyHotkey2", "G1KMLRJ", "*", "Save")
Gui, Add, Edit, Center vText wp y+50
Hotkey_KillFocus("MyHotkey2")
Gui, Show
Return

Save(Name) { 
    GuiControl, , Text, % Name " = " Hotkey_Write(Name)
}

GuiClose() {
    ExitApp
}
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

257 (изменено: Vitalkerrain, 2018-08-12 14:08:54)

Re: AHK: Замена стандартного элемента управления "Hotkey"

Привет. Вот тыкните меня носом, никак не пойму, как сделать из

Gui, Add, Hotkey, x202 y300 w70 h20 vCombo, %Combo%

вариант из темы

Hotkey_Add("wp y+10", "MyHotkey2", "G1KMLRJ", Hotkey_Read("MyHotkey2"), "Save")

Мой вариант

Hotkey_Add("x202 y300 w70 h20", "Combo", "G1KMLRJ", Hotkey_Read("Combo"), "Save")

Не работает. Я не могу понять как пришить %Combo%. Контрол создал, кнопки ставятся, но не работает мой вариант по нажатию Кнопки комбо.

258 (изменено: serzh82saratov, 2018-08-12 14:18:03)

Re: AHK: Замена стандартного элемента управления "Hotkey"

Вы весь код приведите.
Не понятно что значит:

Vitalkerrain пишет:

не работает мой вариант по нажатию Кнопки комбо.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

259 (изменено: Vitalkerrain, 2018-08-12 14:26:16)

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov Вот есть простой макрос - я опустил лишнее


IniRead, Armlet , Armlet of Mordiggian.ini, Items , Armlet
IniRead, Combo , Armlet of Mordiggian.ini, Combo , Combo
Gui, Add, Picture, x202 y162 w70 h50 , %A_Temp%/Armlet.png
Gui, Add, Hotkey, x202 y209 w70 h20 vArmlet, %Armlet%
Gui, Add, Hotkey, x202 y300 w70 h20 vCombo, %Combo%
Gui, Add, Picture, x399 y349 w80 h30 vmOFF, %a_temp%/mOFF.png
Gui, Add, Picture, x399 y349 w80 h30 vmON, %A_Temp%/mON.png
Gui, Font, S10 CDefault Bold, Verdana
Gui, Add, Text, x202 y280 w70 h20 +Center, КОМБО
Gui, Add, Picture, x0 y329 w60 h50 gOk, %A_Temp%/Save.png
Gui, Show, w479 h379, Armlet of Mordiggian v1.0
Gosub, Ok
return


Ok:
Hotkey, %Armlet% , off , UseErrorLevel
Hotkey, %Combo% , off , UseErrorLevel
Gui, Submit, NoHide
b := [Armlet, Combo]
Loop % b.MaxIndex()
{
t := A_Index
a := ""
modi := ""
a := % b[t]
Loop
{
first := ""
StringLeft first, a, 1
if (first = "+" or first ="^" or first ="!")
{
modi := modi . first
StringTrimLeft a, a, 1
}
else
break
}
a := Format("sc{:x}", GetKeySC(a))
b[t] := modi . a
}
Armlet := b[1]
Combo := b[2]
IniWrite, %Armlet%, Armlet of Mordiggian.ini, Items, Armlet
IniWrite, %Combo%, Armlet of Mordiggian.ini, Combo, Combo
Hotkey, %Combo% , Combo, On , UseErrorLevel
Hotkey, %Armlet% , Armlet, On , UseErrorLevel
return

Combo:
sendinput {%Armlet% 2}
return

Видно, что При нажатии контрола "Combo" выполняется нажатие контрола "Armlet" - 2 раза.
Я строку с добавлением комбо меняю на

Hotkey_Add("x202 y300 w70 h20", "Combo", "G1KMLRJ", Hotkey_Read("Combo"), "Save")

Всё работает понимает кнопки мыши, сохраняется и т.д Но больше не выполняет то, что задано в

Combo:
sendinput {%Armlet% 2}
return

260

Re: AHK: Замена стандартного элемента управления "Hotkey"

Посмотрите пример  "Назначение хоткеев из назначенных клавиш".
В переменной Combo ничего нет, тут вообще нет никаких переменных, есть просто имена.

Hotkey, % Hotkey_Value("Combo"), Combo, On , UseErrorLevel
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

261

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov Замечательно теперь работает! Спасибо)

262

Re: AHK: Замена стандартного элемента управления "Hotkey"

Я так понял вы нажатием из Combo посылаете Armlet? Тогда зачем

Hotkey, %Armlet% , off , UseErrorLevel
Hotkey, %Armlet% , Armlet, On , UseErrorLevel

И G1 из опций можно убрать, они же могут повторятся.
И для удобства проще писать в одну секцию ини файла.
И есть функция Hotkey_HKToSend, так что можно немного сократить код.


#SingleInstance Force
#NoEnv
#UseHook

Hotkey_IniPath(A_ScriptDir "\Armlet of Mordiggian.ini")
Hotkey_IniSection("Hotkeys")

Gui, Add, Picture, x202 y162 w70 h50 , %A_Temp%/Armlet.png 
Hotkey_Add("x80 y209 w300 h20", "Armlet", "G1KMLRJ", "*")
Hotkey_Add("x80 y300 w300 h20", "Combo", "G1KMLRJ", "*") 
Gui, Add, Picture, x399 y349 w80 h30 vmOFF, %a_temp%/mOFF.png
Gui, Add, Picture, x399 y349 w80 h30 vmON, %A_Temp%/mON.png
Gui, Font, S10 CDefault Bold, Verdana
Gui, Add, Text, x202 y280 w70 h20 +Center, КОМБО
Gui, Add, Picture, x0 y329 w60 h50 gOk, %A_Temp%/Save.png
Gui, Show, w479 h379, Armlet of Mordiggian v1.0 

Ok: 
	Hotkey, % PrKey_Combo, Off, UseErrorLevel
	PrKey_Combo := Hotkey_Write("Combo")
	Hotkey, % PrKey_Combo, Combo, On, UseErrorLevel 
	Send_Armlet := Hotkey_HKToSend(Hotkey_Write("Armlet"))
	return

Combo:
	Loop 2
		sendinput % Send_Armlet
	return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

263

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov Так еще прекрасней работает. И можно ли использовать сохранение в конструкции, если да то как?

Save(Name) {

Не ругайте, за то что юзаю всё в одном файле, мне так удобнее. Таким образом код должен выглядеть так или можно ещё сократить?

#SingleInstance Force
#NoEnv
#UseHook
Hotkey_IniPath(A_ScriptDir "\Armlet of Mordiggian.ini")
Hotkey_IniSection("Hotkeys")
FileInstall, dota.png , %A_Temp%/dota.png , 1
FileInstall, Armlet.png , %A_Temp%/Armlet.png , 1
FileInstall, vk.png , %A_Temp%/vk.png , 1
FileInstall, YouTube.png , %A_Temp%/YouTube.png , 1
FileInstall, Save.png , %A_Temp%/Save.png , 1
FileInstall, button_nazhimaem-na-kartinki.png , %A_Temp%/button_nazhimaem-na-kartinki.png , 1
FileInstall, button_podpisyvajtes-na-menya.png , %A_Temp%/button_podpisyvajtes-na-menya.png , 1
FileInstall, information.png , %A_Temp%/information.png , 1
FileInstall, Settings.png , %A_Temp%/Settings.png , 1
FileInstall, Fon_1.png , %A_Temp%/Fon_1.png , 1
FileInstall, mOFF.png , %A_Temp%/mOFF.png , 1
FileInstall, mON.png , %A_Temp%/mON.png , 1
Gui, Add, Picture, x-248 y-41 w970 h470 , %A_Temp%/dota.png
Gui, Add, Picture, x202 y162 w70 h50 , %A_Temp%/Armlet.png 
Hotkey_Add("x80 y209 w300 h20", "Armlet", "G1KMLRJ", "*")
Hotkey_Add("x80 y300 w300 h20", "Combo", "G1KMLRJ", "*") 
Gui, Add, Picture, x399 y349 w80 h30 vmOFF, %a_temp%/mOFF.png
Gui, Add, Picture, x399 y349 w80 h30 vmON, %A_Temp%/mON.png
Gui, Font, S10 CDefault Bold, Verdana
Gui, Add, Text, x202 y280 w70 h20 +Center, КОМБО
Gui, Add, Picture, x0 y329 w60 h50 gOk, %A_Temp%/Save.png
Gui, Show, w479 h379, Armlet of Mordiggian v1.0
return

Ok: 
	Hotkey, % PrKey_Combo, Off, UseErrorLevel
	PrKey_Combo := Hotkey_Write("Combo")
	Hotkey, % PrKey_Combo, Combo, On, UseErrorLevel 
	Send_Armlet := Hotkey_HKToSend(Hotkey_Write("Armlet"))
	return		

Combo:
	Loop 2
		sendinput % Send_Armlet
	return
	
F8:: ; Приостановка по F8.
 Suspend Toggle
 if (!A_IsSuspended)
 {
guicontrol hide, mOFF
guicontrol show, mON
 }
 Else
 {
guicontrol show, mOFF
guicontrol hide, mON
 }
 return

Save(Name) {
    ; Записываем в ини файл. Путь и секция используются из Hotkey_IniPath и Hotkey_IniSection которые указали в начале.
    ; Hotkey_Write возвращает то что записал.
	HotKey := Hotkey_Write(Name)
    ; Просто для демонстрации.
    GuiControl, , Text, % Name " = " HotKey
}

GuiClose() {
    ExitApp
}

Hotkey_Add(ControlOption, Name, Option = "", Hotkey = "", Func = "", BindString = "", ByRef hEdit = "") {
	Local M, M1, M2, FuncObj, GuiName, Write, hGui, hDummy
	If (Name + 0 != "") {
		MsgBox, 4112, Hotkey add error, % "Name '" Name "' can not be a number, exit app."
		ExitApp
	}
	If Hotkey = *
		Hotkey := Hotkey_Read(Name)
	Else If Hotkey ~= "^:"
		Hotkey := SubStr(Hotkey, 2), Write := 1
	RegExMatch(ControlOption, "S)^\s*(\S+:)*(.*)$", M), GuiName := M1, ControlOption := M2
	ControlOption := "r1 +ReadOnly +Center " Hotkey_Arr("ControlOption") " " ControlOption
	Gui, %GuiName%Add, Edit, %ControlOption% hwndhEdit, % Hotkey_HKToStr(Hotkey)
	Hotkey_ID(hEdit, Name), Hotkey_ID(Name, hEdit), Hotkey_Value(Name, Hotkey)
	If !Hotkey_Arr("Focus")[hGui := DllCall("GetParent", Ptr, hEdit)] {
		Gui, %GuiName%Add, Text, xp yp wp hp Hidden hwndhDummy
		Hotkey_Arr("Focus")[hGui] := hDummy
	}
	If Write
		Hotkey_Write(Name)
	RegExMatch(Option, "Si)G(\d+)", M) && Hotkey_Group("Set", Name, M1)
	Hotkey_Options(hEdit, Option = "" ? "K" : Option)
	Hotkey_Arr("BindString")[Name] := BindString
	Hotkey_Arr("AllHotkeys")[Name] := hEdit
	FuncObj := Func(Func).Bind(Name)
	GuiControl, +g, % hEdit, % FuncObj
	Hotkey_Start()
}

Hotkey_Start() {
	Static IsStart
	Local fn, k, v
	If IsStart
		Return Hotkey_IsRegFocus()
	#HotkeyInterval 0
	fn := Func("Hotkey_WM_LBUTTONDBLCLK"), OnMessage(0x203, fn)  ;	WM_LBUTTONDBLCLK
	If Hotkey_Arr("KillFocus")
		for, k, v in {WM_LBUTTONDOWN:0x201,WM_LBUTTONUP:0x202,WM_NCLBUTTONDOWN:0xA1}
			fn := Func("Hotkey_FocusClick"), OnMessage(v, fn)
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback("Hotkey_EventFocus", "F"), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	If !Hotkey_Arr("ResetAllways")
		Hotkey_InitHotkeys()
	Hotkey_IsRegFocus(), IsStart := 1
}

Hotkey_Main(Param1, Param2 = "") {
	Static OnlyMods, ControlHandle, Hotkey, KeyName, K := {}
	, Prefix := {"LCtrl":"<^","RCtrl":">^","LShift":"<+","RShift":">+"
				,"LAlt":"<!","RAlt":">!","LWin":"<#","RWin":">#"
				,"Ctrl":"^","Shift":"+","Alt":"!","Win":"#"}
	, EngSym := {"sc2":"1","sc3":"2","sc4":"3","sc5":"4","sc6":"5","sc7":"6"
				,"sc8":"7","sc9":"8","scA":"9","scB":"0","scC":"-","scD":"="
				,"sc10":"Q","sc11":"W","sc12":"E","sc13":"R","sc14":"T","sc15":"Y"
				,"sc16":"U","sc17":"I","sc18":"O","sc19":"P","sc1A":"[","sc1B":"]"
				,"sc1E":"A","sc1F":"S","sc20":"D","sc21":"F","sc22":"G","sc23":"H"
				,"sc24":"J","sc25":"K","sc26":"L","sc27":"`;","sc28":"'","sc29":"``"
				,"sc2B":"\","sc2C":"Z","sc2D":"X","sc2E":"C","sc2F":"V","sc30":"B"
				,"sc31":"N","sc32":"M","sc33":",","sc34":".","sc35":"/","sc56":"\"}
	Local IsMod, ThisHotkey, Text
	If Param1 = GetMod
		Return !!(K.MLCtrl K.MRCtrl K.MLShift K.MRShift K.MLAlt K.MRAlt K.MLWin K.MRWin K.MCtrl K.MShift K.MAlt K.MWin)
	If Param1 = Clean
	{
		ControlHandle := !Param2 ? ControlHandle : Param2
		Hotkey_SetText(ControlHandle, Hotkey_Arr("Empty"), "")
		Return K := {}, OnlyMods := 0, Hotkey := KeyName := ""
	}
	If Param2
	{
		K := {}
		If OnlyMods && !(OnlyMods := 0)
			Hotkey_SetText(ControlHandle, Hotkey_Arr("Empty"), "")
		ControlHandle := Param2
		Hotkey_Arr("Hook", Hotkey_Options(ControlHandle))
		PostMessage, 0x00B1, -2, -2, , ahk_id %ControlHandle%   ;	EM_SETSEL
	}
	Else If Hotkey_Arr("Hook")
	{
		Hotkey_Arr("Hook", "")
		If OnlyMods && !(OnlyMods := 0)
			Hotkey_SetText(ControlHandle, Hotkey_Arr("Empty"), "")
		SetTimer, Hotkey_IsRegFocus, -200
	}
	Return

	Hotkey_Mods:
		ThisHotkey := Hotkey_GetName(A_ThisHotkey, "M")
		If Hotkey_IsBan(ThisHotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		If Hotkey_InHook("S") || Hotkey_InHook("W")
		{
			KeyName := Hotkey := ThisHotkey
			GoTo, Hotkey_Put
		}
		IsMod := Hotkey_InHook("D") ? ThisHotkey : SubStr(ThisHotkey, 2)
		If (K["M" IsMod] != "")
			Return
		K["M" IsMod] := IsMod " + ", K["P" IsMod] := Prefix[IsMod]
		GoTo, Hotkey_ViewMod

	Hotkey_ModsUp:
		If Hotkey_InHook("S") || Hotkey_InHook("W")
			Return
		ThisHotkey := Hotkey_GetName(SubStr(A_ThisHotkey, 1, -3), "M")
		If Hotkey_InHook("Z") && Hotkey = ""
		{
			If Hotkey_IsBan(ThisHotkey, ControlHandle)
				Return Hotkey_Main("Clean")
			K := {}, KeyName := Hotkey := ThisHotkey
			GoTo, Hotkey_Put
		}
		IsMod := Hotkey_InHook("D") ? ThisHotkey : SubStr(ThisHotkey, 2)
		If K["M" IsMod] = ""  ;	Check LCtrl Up, for activate window AltGr layout language
			Return
		If Hotkey_IsBan(ThisHotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		K["M" IsMod] := "", K["P" IsMod] := ""
		If (Hotkey != "")
			Return

	Hotkey_ViewMod:
		Hotkey := "", OnlyMods := 1
		K.Mods := K.MLCtrl K.MRCtrl K.MLShift K.MRShift K.MLAlt K.MRAlt K.MLWin K.MRWin K.MCtrl K.MShift K.MAlt K.MWin
		Text := K.Mods = "" ? Hotkey_Arr("Empty") : K.Mods
		Hotkey_SetText(ControlHandle, Text, "")
		Return

	Hotkey_ViewNum:  ;	code
		ThisHotkey := Hotkey_GetName(A_ThisHotkey, "C")
		If Hotkey_IsBan(ThisHotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		 If Hotkey_InHook("N")
			KeyName := GetKeyName(ThisHotkey), Hotkey := ThisHotkey
		Else
			Hotkey := Format("sc{:x}", GetKeySC(ThisHotkey)), KeyName := GetKeyName(Hotkey)
		GoTo, Hotkey_Put

	Hotkey_ViewNumExcept:  ;	code
		ThisHotkey := Hotkey_GetName(A_ThisHotkey, "C")
		If Hotkey_IsBan(ThisHotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		If Hotkey_InHook("N")
			GetKeyState("NumLock", "T") ? (KeyName := "Numpad5", Hotkey := "vk65") : (KeyName := "NumpadClear", Hotkey := "vkC")
		Else
			KeyName := "NumpadClear", Hotkey := ThisHotkey
		GoTo, Hotkey_Put

	Hotkey_ViewSC:  ;	code
		ThisHotkey := Hotkey_GetName(A_ThisHotkey, "C")
		If Hotkey_IsBan(ThisHotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		KeyName := Hotkey_Arr("OnlyEngSym") ? EngSym[ThisHotkey] : Format("{:U}", GetKeyName(ThisHotkey))
		Hotkey := ThisHotkey
		GoTo, Hotkey_Put

	Hotkey_ViewJoy:
		If Hotkey_Main("GetMod") || Hotkey_InHook("W")
			Return
		ThisHotkey := Hotkey_GetName(A_ThisHotkey, "J")
		If Hotkey_IsBan(ThisHotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		KeyName := Hotkey := ThisHotkey
		GoTo, Hotkey_Put

	Hotkey_View:
		ThisHotkey := Hotkey_GetName(A_ThisHotkey, "N")
		If Hotkey_IsBan(ThisHotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		KeyName := Hotkey := ThisHotkey

	Hotkey_Put:
		If Hotkey_InHook("W")
			GoTo, Hotkey_Double
		OnlyMods := 0
		K.Prefix := K.PLCtrl K.PRCtrl K.PLShift K.PRShift K.PLAlt K.PRAlt K.PLWin K.PRWin K.PCtrl K.PShift K.PAlt K.PWin
		K.Mods := K.MLCtrl K.MRCtrl K.MLShift K.MRShift K.MLAlt K.MRAlt K.MLWin K.MRWin K.MCtrl K.MShift K.MAlt K.MWin
		Text := K.Mods KeyName = "" ? Hotkey_Arr("Empty") : K.Mods KeyName
		Hotkey_SetText(ControlHandle, Text, K.Prefix Hotkey)

	Hotkey_GroupCheck:
		If Hotkey_Group("Get", Hotkey_ID(ControlHandle)) && Hotkey_Group("SaveCheck", ControlHandle)
			SetTimer, Hotkey_Group, -70
		Return

	Hotkey_Double:
		If !K.Double
		{
			K.DHotkey := Hotkey, K.DName := KeyName, K.Double := 1, OnlyMods := 1
			Hotkey_SetText(ControlHandle, KeyName " & ", "")
			Return
		}
		If (K.DHotkey = Hotkey)
			Return
		Text := K.DName " & " KeyName, K.Double := 0, OnlyMods := 0
		Hotkey_SetText(ControlHandle, Text, K.DHotkey " & " Hotkey)
		GoTo, Hotkey_GroupCheck

	Hotkey_RButton:
		If Hotkey_InHook("L") && GetKeyState("LButton"`, "P")
			KeyName := Hotkey := "LButton"
		Else If Hotkey_InHook("R")
			KeyName := Hotkey := "RButton"
		Else
			Return
		If Hotkey_IsBan(Hotkey, ControlHandle)
			Return Hotkey_Main("Clean")
		GoTo, Hotkey_Put
}

Hotkey_GetName(HK, Type) {
	Static ModsNames := {"LCtrl":"LCtrl","RCtrl":"RCtrl","LShift":"LShift"
	,"RShift":"RShift","LAlt":"LAlt","RAlt":"RAlt","LWin":"LWin","RWin":"RWin"}
	HK := RegExReplace(HK, "S)[~\*\$]")
	If Type = N
		Return GetKeyName(HK)
	If Type = M
		Return ModsNames[HK]
	If Type = C
		Return RegExReplace(HK, "Si)(vk|sc)(.*)", "$L1$U2")
	If Type = J
		Return RegExReplace(HK, "Si)(Joy)", "Joy", , 1)
}

Hotkey_InitHotkeys(Option = 1) {
	Local S_FormatInteger, S_BatchLines
	Static nmMods := "LCtrl|RCtrl|LShift|RShift|LAlt|RAlt|LWin|RWin"
	, nmMouse := "MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2"
	, scSymb := "2|3|4|5|6|7|8|9|A|B|C|D|10|11|12|13|14|15|16|17|18|19|1A|1B|"
		. "1E|1F|20|21|22|23|24|25|26|27|28|29|2B|2C|2D|2E|2F|30|31|32|33|34|35|56"
	, scOther := "1|E|F|1C|37|39|3A|3B|3C|3D|3E|3F|40|41|42|43|44|46|4A|4E|54|57|58|63|64|65|"
		. "66|67|68|69|6A|6B|6C|6D|6E|76|7C|11C|135|145|147|148|149|14B|14D|14F|150|151|152|153|15D"
	, vkNum := "21|22|23|24|25|26|27|28|2D|2E|60|61|62|63|64|66|67|68|69|6E|C|65"	; , scNum := "53|52|4F|50|51|4B|4D|47|48|49|4C|59"
	, vkOther := "3|13|5F|A6|A7|A8|A9|AA|AB|AC|AD|AE|AF|B0|B1|B2|B3|B4|B5|B6|B7"

	S_BatchLines := A_BatchLines
	SetBatchLines, -1
	Option := Option ? "On" : "Off"
	#IF Hotkey_IsRegControl()
	#IF Hotkey_Hook("K")
	#IF Hotkey_Hook("M")
	#IF Hotkey_Hook("L") && GetKeyState("RButton", "P")
	#IF Hotkey_Hook("R") || Hotkey_InHook("L")
	#IF Hotkey_Hook("J")
	#IF Hotkey_Arr("Hook") && !Hotkey_InHook("K")
	#IF
	Hotkey, IF, Hotkey_Hook("M")
	Loop, Parse, nmMouse, |
		Hotkey, % A_LoopField, Hotkey_View, % Option
	Hotkey, IF, Hotkey_Hook("K")
	Loop, Parse, nmMods, |
	{
		Hotkey, % A_LoopField, Hotkey_Mods, % Option
		Hotkey, % A_LoopField " Up", Hotkey_ModsUp, % Option
	}
	Loop, Parse, scSymb, |
		Hotkey, % "sc" A_LoopField, Hotkey_ViewSC, % Option
	Loop, Parse, scOther, |
		Hotkey, % GetKeyName("sc" A_LoopField), Hotkey_View, % Option
	Loop, Parse, vkNum, |
		Hotkey, % "vk" A_LoopField, Hotkey_ViewNum, % Option
	Hotkey, sc59, Hotkey_ViewNumExcept, % Option  ;	NumpadClear
	Loop, Parse, vkOther, |
		Hotkey, % GetKeyName("vk" A_LoopField), Hotkey_View, % Option
	Hotkey, IF, Hotkey_Hook("L") && GetKeyState("RButton"`, "P")
	Hotkey, LButton, Hotkey_Return, % Option
	Hotkey, IF, Hotkey_Hook("R") || Hotkey_InHook("L")
	Hotkey, RButton, Hotkey_Return, % Option
	Hotkey, RButton Up, Hotkey_RButton, % Option
	S_FormatInteger := A_FormatInteger
	SetFormat, IntegerFast, D
	Hotkey, IF, Hotkey_Hook("J")
	Loop, 128
		Hotkey % Ceil(A_Index / 32) "Joy" Mod(A_Index - 1, 32) + 1, Hotkey_ViewJoy, % Option
	SetFormat, IntegerFast, %S_FormatInteger%
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton, Hotkey_Return, % Option
	Hotkey, RButton Up, Hotkey_Return, % Option
	Hotkey, IF, Hotkey_Arr("Hook") && !Hotkey_InHook("K")
	Hotkey, AppsKey Up, Hotkey_Return, % Option
	Hotkey, +F10, Hotkey_Return, % Option
	Hotkey, IF
	SetBatchLines, %S_BatchLines%
	Return

	Hotkey_Return:
		Return
}

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

Hotkey_IsRegFocus() {
	Local ControlNN, hFocus
	ControlGetFocus, ControlNN, A
	ControlGet, hFocus, Hwnd, , %ControlNN%, A
	Hotkey_ID(hFocus) != "" ? Hotkey_Main("Control", hFocus) : 0
}

Hotkey_WM_LBUTTONDBLCLK(wp, lp, msg, hwnd) {
	If (Hotkey_ID(hwnd) = "")
		Return
	Hotkey_Main("Clean", hwnd)
	Sleep 50
	PostMessage, 0x00B1, -2, -2, , ahk_id %hwnd%   ;	EM_SETSEL
}

Hotkey_EventFocus(hWinEventHook, event, hwnd) {
	Hotkey_ID(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")
}

	; -------------------------------------- Get and set --------------------------------------

Hotkey_Arr(P*) {
	Static Arr := {Empty:"Нет", AllHotkeys:{}, BindString:{}, Focus:{}, User:{}}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : P.MaxIndex() = 2 ? (Arr[P[1]] := P[2]) : !P.MaxIndex() ? Arr : Arr.Delete(P[1])
}

Hotkey_ID(P*) {
	Static Arr := {}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : P.MaxIndex() = 2 ? (Arr[P[1]] := P[2]) : !P.MaxIndex() ? Arr : Arr.Delete(P[1])
}

Hotkey_Value(P*) {
	Static Arr := {}
	Return P.MaxIndex() = 2 ? (Arr[P[1]] := P[2], Arr[Hotkey_ID(P[1])] := P[2]) : P.MaxIndex() = 1 ? Arr[P[1]] : !P.MaxIndex() ? Arr : (Arr.Delete(P[1]), Arr.Delete(Hotkey_ID(P[1])))
}

Hotkey_Options(P*) {
	Static Arr := {}
	Return P.MaxIndex() = 1 ? Arr[P[1]] : P.MaxIndex() = 2 ? (Arr[P[1]] := P[2]) : !P.MaxIndex() ? Arr : Arr.Delete(P[1])
}

Hotkey_BanKey(Keys, Name = 0) {
	Hotkey_BanArr()[Name] := {}
	Loop, Parse, Keys, |
		Hotkey_BanArr()[Name][A_LoopField] := 1
}

Hotkey_BanArr(P*) {
	Static Arr := {}
	Return Arr
}

Hotkey_IsBan(HK, hwnd) {
	If Hotkey_BanArr().0.HasKey(HK)  ;	Global ban
		Return 1
	If Hotkey_BanArr()[Hotkey_ID(hwnd)].HasKey(HK)
		Return 1
	Return 0
}

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_Hook(Option) {
	Return Hotkey_Arr("Hook") && InStr(Hotkey_Arr("Hook"), Option)
}

Hotkey_InHook(Option) {
	Return InStr(Hotkey_Arr("Hook"), Option)
}

Hotkey_ChangeOption(Name, Option = "") {
	Local g, g1
	If Hotkey_Group("Get", Name)
		Hotkey_Group("Delete", Name)
	If RegExMatch(Option, "Si)G(\d+)", g)
		Hotkey_Group("Set", Name, g1)
	Return Hotkey_Options(Hotkey_ID(Name), Option = "" ? "K" : Option), Hotkey_IsRegFocus()
}

Hotkey_Delete(Name, Destroy = 1) {
	Local Hwnd, hFocus, ControlNN
	Hwnd := Hotkey_ID(Name)
	GuiControl, -g, % Hwnd
	If Hotkey_Group("Get", Name)
		Hotkey_Group("Delete", Name)
	Hotkey_Value(Hwnd, "", "")  ;	Удалять, до удаления Hotkey_ID
	Hotkey_ID(Hwnd, "", ""), Hotkey_ID(Name, "", "")
	Hotkey_Options(Hwnd, "", "")
	Hotkey_BanArr().Delete(Name)
	Hotkey_Arr("AllHotkeys").Delete(Name)
	Hotkey_Arr("BindString").Delete(Name)
	ControlGetFocus, ControlNN, A
	ControlGet, hFocus, Hwnd, , %ControlNN%, A
	(hFocus = Hwnd ? Hotkey_Main("Control") : 0)
	If Destroy
		DllCall("DestroyWindow", "Ptr", Hwnd)
	Else
		PostMessage, 0x00CF, 0, , , ahk_id %hwnd%		;	EM_SETREADONLY
	Return Hwnd
}

Hotkey_SetText(hwnd, Text, HK) {
	Hotkey_Value(hwnd, HK)
	SendMessage, 0x000C, 0, &Text, , ahk_id %hwnd%		;	WM_SETTEXT
	PostMessage, 0x00B1, -2, -2, , ahk_id %hwnd%		;	EM_SETSEL
}

Hotkey_Set(Name, HK = "") {
	Local Text
	Text := Hotkey_HKToStr(HK)
	Hotkey_SetText(Hotkey_ID(Name), Text, HK)
	Return Text
}

Hotkey_Read(Name, Section = "", FilePath = "") {
	Local HK
	IniRead, HK, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Name, % A_Space
	Return HK
}

Hotkey_Write(Name, Section = "", FilePath = "") {
	Local HK
	IniWrite, % HK := Hotkey_Value(Name), % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section = "" ? Hotkey_IniSection() : Section, % Name
	Return HK
}

	; -------------------------------------- Focus --------------------------------------

Hotkey_FocusClick(wParam, lParam, msg, hwnd) {
	If Hotkey_Arr("Focus")[hwnd]
		ControlFocus, , % "ahk_id" Hotkey_Arr("Focus")[hwnd]
	Else
		ControlFocus, , ahk_id %hwnd%
}

Hotkey_KillFocus(Name) {
	ControlFocus, , % "ahk_id" Hotkey_Arr("Focus")[DllCall("GetParent", Ptr, Hotkey_ID(Name))]
}

Hotkey_SetFocus(Name) {
	ControlFocus, , % "ahk_id" Hotkey_ID(Name)
}

	; -------------------------------------- Group --------------------------------------

Hotkey_Group(Key = "", p1 = "", p2 = "") {
	Local Name, Value, k, v, n, m, f, r
	Static NG := {}, GN := [], SaveCheck := []
	If (Key = "") {
		For k, Name in SaveCheck {
			If ((Value := Hotkey_Value(Name)) != "") {
				(f := Hotkey_Arr("OnGroup")) != "" && (r := {}, r.names := [])
				For m, n in GN[NG[Name]] {
					If (n != Name && Hotkey_Equal(Value, Hotkey_Value(n))) {
						Hotkey_Set(Name)
						(f != "") && (r.names.Push(n), r.this := Name, r.value := Value, r.group := NG[Name])
						Hotkey_Blink(Hotkey_ID(n))
					}
				}
			}
			SaveCheck.Delete(k)
		}
		(f != "") && (r.this != "") && %f%(r)
	}
	Else If (Key = "Set")
		NG[p1] := p2, IsObject(GN[p2]) ? GN[p2].Push(p1) : GN[p2] := [p1]
	Else If (Key = "SaveCheck")
		Return 1, SaveCheck[p1] := Hotkey_ID(p1)
	Else If (Key = "Get")
		Return NG[p1]
	Else If (Key = "CheckAll") {
		For k, v in GN
			For k, n in v
				If ((Value := Hotkey_Value(n)) != "")
					For k, m in v
						If (n != m && Hotkey_Equal(Value, Hotkey_Value(m)))
							Hotkey_Set(m)
	}
	Else If (Key = "Delete") {
		For k, v in GN[NG[p1]]
			If (v = p1) {
				GN[NG[p1]].RemoveAt(k)
				Break
			}
		NG.Delete(p1)
	}
}

Hotkey_Blink(hwnd) {
	Local k
	Static i, Blink := {}
	If !DllCall("IsWindowVisible", "Ptr", hwnd)
		Return
	DllCall("ShowWindowAsync", "Ptr", hwnd, "Int", 0)
	Blink[hwnd] := 1, i := 3
	SetTimer, Hotkey_BlinkControl, -50
	Return

	Hotkey_BlinkControl:
		For k in Blink
			DllCall("ShowWindowAsync", "Ptr", k, "Int", Mod(i, 2) ? 4 : 0)
		If (--i > 0) || !(Blink := {})
			SetTimer, Hotkey_BlinkControl, -50
		Return
}

Hotkey_Equal(HK1, HK2) {
	Local Bool
	If (HK2 = "")
		Return 0
	If (HK1 = HK2)
		Return 1
	If (HK1 ~= "S)[<>]") && (HK2 ~= "S)[<>]")
		Return 0
	If Hotkey_EqualDouble(HK1, HK2, Bool)
		Return Bool
	If !(HK1 ~= "S)[\^\+!#]") || !(HK2 ~= "S)[\^\+!#]")
		Return 0
	Return (Hotkey_ModsSub(HK1) = Hotkey_ModsSub(HK2))
}

Hotkey_EqualDouble(HK1, HK2, ByRef Bool) {
	Static Prefix := {"LCtrl":"<^","RCtrl":">^","LShift":"<+","RShift":">+"
						,"LAlt":"<!","RAlt":">!","LWin":"<#","RWin":">#"}
	Local K, K1, K2, i, D, P, R
	If !(!!InStr(HK1, " & ") && i:=1) ^ (!!InStr(HK2, " & ") && i:=2)
		Return Bool := 0
	D := HK%i%, P := i = 1 ? HK2 : HK1
	If !((1, RegExReplace(P, "[\^\+!#]", , R, 2)) && (R = 1)
	&& RegExMatch(D, "S)^\s*(.*?) & (.*?)\s*$", K)
	&& (Prefix[K1] && !Prefix[K2]) && (1, D := Prefix[K1] . K2))
		Return Bool := 0
	Return 1, Bool := SubStr(D, 1 + !(P ~= "S)[<>]")) = P
}

Hotkey_ModsSub(HK) {
	If !(HK ~= "[<>]")
		Return HK
	HK := StrReplace(HK, "<")
	HK := StrReplace(HK, ">")
	HK := StrReplace(HK, "^^", "^", , 1)
	HK := StrReplace(HK, "++", "+", , 1)
	HK := StrReplace(HK, "!!", "!", , 1)
	Return StrReplace(HK, "##", "#", , 1)
}

	; -------------------------------------- Format --------------------------------------

Hotkey_HKToStr(HK) {
	Static Prefix := {"^":"Ctrl","+":"Shift","!":"Alt","#":"Win","<":"L",">":"R"}
	, EngSym := {"sc2":"1","sc3":"2","sc4":"3","sc5":"4","sc6":"5","sc7":"6"
				,"sc8":"7","sc9":"8","scA":"9","scB":"0","scC":"-","scD":"="
				,"sc10":"Q","sc11":"W","sc12":"E","sc13":"R","sc14":"T","sc15":"Y"
				,"sc16":"U","sc17":"I","sc18":"O","sc19":"P","sc1A":"[","sc1B":"]"
				,"sc1E":"A","sc1F":"S","sc20":"D","sc21":"F","sc22":"G","sc23":"H"
				,"sc24":"J","sc25":"K","sc26":"L","sc27":"`;","sc28":"'","sc29":"``"
				,"sc2B":"\","sc2C":"Z","sc2D":"X","sc2E":"C","sc2F":"V","sc30":"B"
				,"sc31":"N","sc32":"M","sc33":",","sc34":".","sc35":"/","sc56":"\"

				,"vk31":"1","vk32":"2","vk33":"3","vk34":"4","vk35":"5","vk36":"6"
				,"vk37":"7","vk38":"8","vk39":"9","vk30":"0","vkBD":"-","vkBB":"="
				,"vk51":"Q","vk57":"W","vk45":"E","vk52":"R","vk54":"T","vk59":"Y"
				,"vk55":"U","vk49":"I","vk4F":"O","vk50":"P","vkDB":"[","vkDD":"]"
				,"vk41":"A","vk53":"S","vk44":"D","vk46":"F","vk47":"G","vk48":"H"
				,"vk4A":"J","vk4B":"K","vk4C":"L","vkBA":"`;","vkDE":"'","vkC0":"``"
				,"vkDC":"\","vk5A":"Z","vk58":"X","vk43":"C","vk56":"V","vk42":"B"
				,"vk4E":"N","vk4D":"M","vkBC":",","vkBE":".","vkBF":"/","vkE2":"\"}

	Local K, K1, K2, R, R1, R2, M, P := 1
	If InStr(HK, " & ")
	{
		RegExMatch(HK, "S)^\s*(.*?) & (.*?)\s*$", K)
		If K1 ~= "i)^(vk|sc[^r])"
			K1 := Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K1) ? EngSym[K1] : GetKeyName(K1)
		If K2 ~= "i)^(vk|sc[^r])"
			K2 := Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : GetKeyName(K2)
		Return (StrLen(K1) = 1 ? Format("{:U}", K1) : K1) " & " (StrLen(K2) = 1 ? Format("{:U}", K2) : K2)
	}
	RegExMatch(HK, "S)^\s*([~\*\$\^\+!#<>]*)\{?(.*?)}?\s*$", K)
	If (K2 = "")
		Return "" Hotkey_Arr("Empty")
	If K2 ~= "i)^(vk|sc[^r])"
		K2 := Hotkey_Arr("OnlyEngSym") && EngSym.HasKey(K2) ? EngSym[K2] : GetKeyName(K2)
	While P := RegExMatch(K1, "S)([<>])*([\^\+!#])", R, P) + StrLen(R)
		M .= Prefix[R1] . Prefix[R2] . " + "
	Return M . (StrLen(K2) = 1 ? Format("{:U}", K2) : K2)
}

Hotkey_HKToSend(HK, Section = "", FilePath = "") {
	Local K, K1, K2
	If (HK = "")
		Return
	If (Section != "")
		IniRead, HK, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section, % HK, % A_Space
	If InStr(HK, " & ") && (1, RegExMatch(HK, "S)^\s*(.*?) & (.*?)\s*$", K))
		Return "{" RegExReplace(K1, "S)[~\$\*]") "}{" K2 "}"
	RegExMatch(HK, "S)^\s*([~\*\$\^\+!#<>]*)\{?(.*?)}?\s*$", K)
	Return RegExReplace(K1, "S)([^\^\+!#]*)") "{" K2 "}"
}

Hotkey_HKToSendEx(HK, Section = "", FilePath = "") {
	Static V := {"^":"Ctrl","+":"Shift","!":"Alt","#":"Win","<":"L",">":"R","":"L"}
	Local K, K1, K2, M1, M2, R, R1, R2, P := 1
	If (HK = "")
		Return
	If (Section != "")
		IniRead, HK, % FilePath = "" ? Hotkey_IniPath() : FilePath, % Section, % HK, % A_Space
	If InStr(HK, " & ") && (1, RegExMatch(HK, "S)^\s*(.*?) & (.*?)\s*$", K))
		Return "{" (K1 := RegExReplace(K1, "S)[~\$\*]")) " Down}{" K2 " Down}{" K1 " Up}{" K2 " Up}"
	RegExMatch(HK, "S)^\s*([~\*\$\^\+!#<>]*)\{?(.*?)}?\s*$", K)
	While P := RegExMatch(K1, "S)([<>])*([\^\+!#])", R, P) + StrLen(R)
		M1 .= "{" V[R1] V[R2] " Down}", M2 .= "{" V[R1] V[R2] " Up}"
	Return M1 . "{" K2 "}" . M2
}

264

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov И немного прокоментируйте пожалуйста

Ok: 
	Hotkey, % PrKey_Combo, Off, UseErrorLevel
	PrKey_Combo := Hotkey_Write("Combo")
	Hotkey, % PrKey_Combo, Combo, On, UseErrorLevel 
	Send_Armlet := Hotkey_HKToSend(Hotkey_Write("Armlet"))
	return

Не очень понимаю, что за что отвечает

265 (изменено: serzh82saratov, 2018-08-12 18:49:38)

Re: AHK: Замена стандартного элемента управления "Hotkey"

Не ругайте, за то что юзаю всё в одном файле, мне так удобнее.

Ну актуальную версию библиотеки точно не надо добавлять в пост.

Я обновил библиотеку, теперь кол-во нажатий можно задать в Hotkey_HKToSend.

можно ли использовать сохранение в конструкции, если да то как?

Я так понял вы спрашиваете как сохранять на лету, без кнопки сохранения.


#SingleInstance Force
#NoEnv
#UseHook

Hotkey_IniPath("Hotkey.ini")
Hotkey_IniSection("Hotkeys")
Gui, Add, Text, w300 +Center, Send
Hotkey_Add("wp", "Send", "KMLRJ", "*", "fSend")
Gui, Add, Text, wp y+10 +Center, Press
Hotkey_Add("wp y+10", "Press", "KMLRJ", "*", "fPress")
Gui, Add, Edit, wp y+20 r22
Gui, Show
fPress(), fSend()  ;	назначаем хоткей и строку для Send
return

fPress() {
	Static PrKey_Press
	Hotkey, % PrKey_Press, Off, UseErrorLevel
	PrKey_Press := Hotkey_Write("Press")
	Hotkey, % PrKey_Press, lPress, On, UseErrorLevel  
}

fSend() {
	Global
	Str_Send := Hotkey_HKToSend(Hotkey_Write("Send"), 3) 
}

lPress: 
	SendInput % Str_Send
	return

GuiClose() {
    ExitApp
}

Не очень понимаю, что за что отвечает

Так всё в описании есть, Hotkey_Write и Hotkey_HKToSend.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

266

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov Благодарю

267

Re: AHK: Замена стандартного элемента управления "Hotkey"

Я добавил в описание пример про "Переназначение клавиш", он продвинутый, но полезный если много подобных переназначений.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

268 (изменено: Gutalin, 2018-08-17 20:40:54)

Re: AHK: Замена стандартного элемента управления "Hotkey"

1)При отключении хоткеев с помощью

Hotkey_InitHotkeys(bool)

Их нельзя будет ввести, но можно будет удалить двойным нажатием ЛКМ.
Как можно сделать, чтобы не ввести и не удалить хоткей нельзя было?
2)Поле ввода хоткеев всегда того же цвета,что и фон окна, можно ли сделать, чтобы, к примеру, когда Hotkey_InitHotkeys(1) фон поля ввода хоткеев был белый, а во время Hotkey_InitHotkeys(0) как и у фона окна (как в Edit'ах при ReadOnly)

AutoHotkey - 1.1.29.01

269

Re: AHK: Замена стандартного элемента управления "Hotkey"

Hotkey_InitHotkeys сделано для другого, это когда контролов не видно, а ваши хоткеи по разным причинам могут не работать из за установленных хоткеев в библиотеке.
ReadOnly - это уже стиль по умолчанию для создаваемых в библиотеке контролов, чтобы при некоторых условиях нельзя было ввести свои данные.
Вам проще использовать Disabled, его и визуально можно отличить.


for name in Hotkey_Arr("AllHotkeys") 
	GuiControl, Disabled, % Hotkey_ID(name)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

270

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov, да, Вы правы. Работает идеально, спасибо!

AutoHotkey - 1.1.29.01

271

Re: AHK: Замена стандартного элемента управления "Hotkey"

Недавно меня ещё спрашивали как переместить, я добавил:

Hotkey_Move(Name, Option)
Hotkey_Disable(Name)
Hotkey_Hide(Name)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

272

Re: AHK: Замена стандартного элемента управления "Hotkey"

Gutalin
В вашем случае так:

MsgBox Отключить все
for name in Hotkey_Arr("AllHotkeys")  
	Hotkey_Disable(Name) 
	
MsgBox Включить все
for name in Hotkey_Arr("AllHotkeys")  
	Hotkey_Disable(Name, 0)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

273

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov, а в чем разница? На вид я не замечаю отличий?

AutoHotkey - 1.1.29.01

274

Re: AHK: Замена стандартного элемента управления "Hotkey"

GuiControl, Disabled, % Hotkey_ID(name)

и

Hotkey_Disable(Name)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

275 (изменено: Gutalin, 2018-08-17 21:23:47)

Re: AHK: Замена стандартного элемента управления "Hotkey"

serzh82saratov, функциональных изменений я не замечаю. Так же блокируется, код становится меньше.

AutoHotkey - 1.1.29.01