<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Конвертирование хоткеев]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=11692</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=11692&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Конвертирование хоткеев».]]></description>
		<lastBuildDate>Mon, 25 Jul 2016 20:19:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=106340#p106340</link>
			<description><![CDATA[<p>Ясно, спасибо. А я ведь пробовал так, только без кавычек.<br /></p><div class="codebox"><pre><code>ButtonSave: 
	Hotkey_IniWrite(&quot;modkey1&quot;, &quot;ModKey&quot;, PathIni)
	Return</code></pre></div><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Давайте продолжим разговор касаемый библиотеки в <a href="http://forum.script-coding.com/viewtopic.php?pid=106333#p106333">её теме</a>, там как раз про сохранения спрашивали.</p></blockquote></div><p>Хорошо.</p>]]></description>
			<author><![CDATA[null@example.com (Sgy-x2)]]></author>
			<pubDate>Mon, 25 Jul 2016 20:19:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=106340#p106340</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=106338#p106338</link>
			<description><![CDATA[<p>Давайте продолжим разговор касаемый библиотеки в <a href="http://forum.script-coding.com/viewtopic.php?pid=106333#p106333">её теме</a>, там как раз про сохранения спрашивали.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 25 Jul 2016 20:16:45 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=106338#p106338</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=106336#p106336</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />Совсем запутался, не могу сохранения настроить. Сброс сохраняет, а заданный хоткей не сохраняет. В чем проблема?</p><div class="codebox"><pre><code>modkey1 = !sc28
Gui, Add, Edit, hwndhmodkey1 r1 w222, % Hotkey_Set(&quot;modkey1&quot;, modkey1)
Gui, Add, Button, , Save
Gui, Add, Button, , Reset
Hotkey_Register([&quot;modkey1&quot;,hmodkey1,&quot;KMLRJD&quot;])
Gui, Show
Return

ButtonSave:
	IniWrite, % modkey1, % PathIni, ModKey, modkey1
Return

ButtonReset:
	modkey1 := &quot;sc26&quot;
	Hotkey_Set(&quot;modkey1&quot;, modkey1)
	Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Sgy-x2)]]></author>
			<pubDate>Mon, 25 Jul 2016 19:45:52 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=106336#p106336</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105980#p105980</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />А можно сделать параметр, который определял бы только кнопки модификаторы?</p>]]></description>
			<author><![CDATA[null@example.com (Sgy-x2)]]></author>
			<pubDate>Fri, 08 Jul 2016 11:42:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105980#p105980</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105839#p105839</link>
			<description><![CDATA[<div class="codebox"><pre><code>Control,ExStyle,-0x4,,ahk_id %CtrlHWND%
</code></pre></div><p>Хотя, нет, не работает...</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sun, 03 Jul 2016 05:29:50 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105839#p105839</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105826#p105826</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Надо в опции элемента добавлять &quot;r1&quot;</p></blockquote></div><p>Как-то так?<br /></p><div class="codebox"><pre><code>Gui, 2:Add, Edit, r1 w120 hwndhmodkey1 gWriteIni, % Hotkey_HKToStr(modkey1)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Sgy-x2)]]></author>
			<pubDate>Sat, 02 Jul 2016 19:45:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105826#p105826</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105824#p105824</link>
			<description><![CDATA[<p>Есть пример кода?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 02 Jul 2016 19:31:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105824#p105824</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105823#p105823</link>
			<description><![CDATA[<p>Может &quot;<a href="https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb775464(v=vs.85).aspx">ES_MULTILINE</a>&quot;?...</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sat, 02 Jul 2016 19:15:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105823#p105823</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105822#p105822</link>
			<description><![CDATA[<p>Надо в опции элемента добавлять &quot;r1&quot;, я пока не нашёл как это делать в библиотеке, то есть не знаю как добавить эту оцию после создания элемента. Думал получится так:</p><div class="codebox"><pre><code>GuiControl, +r1, %hwnd%</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 02 Jul 2016 18:53:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105822#p105822</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105821#p105821</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />Намедни решил поэкспериментировать с комбинациям хоткеев, и выяснился не очень приятный баг. Если использовать длинные хоткеи (Пример Ctrl+Shifh+Alt+Lbutton) и длинна хоткея будет больше поля ввода этого хоткея, то его в последствии невозможно будет изменить. Т.е. в поле ввода хоткея он вбивается, а сохранение не происходит. Так же, при следующем запуске, этот хоткей отображается в две строки. Если увеличить размер поля ввода, и этот хоткей будет помещаться в одну строку, то всё нормально сохраняется. Что это может быть?</p>]]></description>
			<author><![CDATA[null@example.com (Sgy-x2)]]></author>
			<pubDate>Sat, 02 Jul 2016 17:37:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105821#p105821</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105633#p105633</link>
			<description><![CDATA[<p>Было такое, это опция &quot;S&quot;, но я про неё забыл в новой версии, исправил 31 пост.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 28 Jun 2016 05:34:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105633#p105633</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105628#p105628</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong><br />Скажите пожалуйста. В вашем скрипте есть возможность выбора какие клавиши будут определены.<br /></p><div class="codebox"><pre><code>; K - Определять клавиши клавиатуры
; M - Кнопки мыши без левой и правой.
; L - Левая кнопка мыши, определяется только при удерживаемой правой кнопке мыши.
; R - Правая кнопка мыши.
; J - Кнопки джойстика, определяются только без модификаторов.
; D - Определять левые и правые модификаторы.
; S - Определять только одну нажатую клавишу, то есть без комбинации с модификаторами. С этим параметром опция &quot;D&quot; не имеет смысла.
</code></pre></div><p>Возникла необходимость задавать кнопки модификаторы (Shift...) в качестве одиночного хоткея, но это не получается, т.к. требуется ввод обычной кнопки.</p>]]></description>
			<author><![CDATA[null@example.com (Sgy-x2)]]></author>
			<pubDate>Tue, 28 Jun 2016 03:18:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105628#p105628</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105557#p105557</link>
			<description><![CDATA[<p>Спасибо большое. Подвисаний, кстати, небыло больше.</p>]]></description>
			<author><![CDATA[null@example.com (Sgy-x2)]]></author>
			<pubDate>Sat, 25 Jun 2016 14:02:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105557#p105557</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105556#p105556</link>
			<description><![CDATA[<p>Внёс правки.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 25 Jun 2016 12:42:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105556#p105556</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Конвертирование хоткеев]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=105523#p105523</link>
			<description><![CDATA[<div class="codebox"><pre><code>
	;  http://forum.script-coding.com/viewtopic.php?id=8343

Hotkey_Register(Controls*) {
	Static IsStart
	Local k, v
	For k, v in Controls
	{
		Hotkey_ID(v[2], v[1]), Hotkey_ID(v[1], v[2])
		Hotkey_Options(v[2], v[3] = &quot;&quot; ? &quot;K&quot; : v[3])
		Hotkey_Value(v[2], Hotkey_Value(v[1]))
		PostMessage, 0x00CF, 1, , , % &quot;ahk_id&quot; v[2]   ;  EM_SETREADONLY
		h := v[2]
		GuiControl, +r1, %h%
		
	}
	If IsStart
		Return Hotkey_IsRegFocus()
	#HotkeyInterval 0
	Hotkey_SetWinEventHook(0x8005, 0x8005, 0, RegisterCallback(&quot;Hotkey_EventFocus&quot;, &quot;F&quot;), 0, 0, 0)   ;  EVENT_OBJECT_FOCUS := 0x8005
	Hotkey_InitHotkeys(), Hotkey_IsRegFocus(), IsStart := 1
}

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

Hotkey_Mods:
	If InStr(Hotkey_Arr(&quot;Hook&quot;), &quot;S&quot;)
		GoTo Hotkey_View
	IsMod := InStr(Hotkey_Arr(&quot;Hook&quot;), &quot;D&quot;) ? A_ThisHotkey : SubStr(A_ThisHotkey, 2)
	If (K[&quot;M&quot; IsMod] != &quot;&quot;)
		Return
	K[&quot;M&quot; IsMod] := IsMod &quot;+&quot;, K[&quot;P&quot; IsMod] := Prefix[IsMod]
	GoTo Hotkey_ViewMod

Hotkey_ModsUp:
	If InStr(Hotkey_Arr(&quot;Hook&quot;), &quot;S&quot;)
		Return
	IsMod := InStr(Hotkey_Arr(&quot;Hook&quot;), &quot;D&quot;) ? SubStr(A_ThisHotkey, 1, -3) : SubStr(A_ThisHotkey, 2, -3)
	K[&quot;M&quot; IsMod] := &quot;&quot;, K[&quot;P&quot; IsMod] := &quot;&quot;
	If (Hotkey != &quot;&quot;)
		Return

Hotkey_ViewMod:
	Hotkey := &quot;&quot;, OnlyMods := 1, Hotkey_Value(Hotkey_ID(ControlHandle), K.Prefix Hotkey), Hotkey_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 = &quot;&quot; ? Hotkey_Arr(&quot;Empty&quot;) : K.Mods
	SendMessage, 0xC, 0, &amp;Text, , ahk_id %ControlHandle%
	Return

Hotkey_View:
Hotkey_ViewSC:
	If (A_ThisLabel = &quot;Hotkey_ViewSC&quot;)
		KeyName := Hotkey_Arr(&quot;OnlyEngSym&quot;) ? EngSym[A_ThisHotkey] : Format(&quot;{:U}&quot;, GetKeyName(A_ThisHotkey))
	Else
		KeyName := A_ThisHotkey
	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_Value(Hotkey_ID(ControlHandle), K.Prefix Hotkey), Hotkey_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 = &quot;&quot; ? Hotkey_Arr(&quot;Empty&quot;) : K.Mods KeyName
	SendMessage, 0xC, 0, &amp;Text, , ahk_id %ControlHandle%
	Return
}

Hotkey_InitHotkeys() {
	Local S_FormatInteger, Name
	Static nmMods := &quot;LAlt|RAlt|LCtrl|RCtrl|LShift|RShift|LWin|RWin&quot;
	, nmMouse := &quot;MButton|WheelDown|WheelUp|WheelRight|WheelLeft|XButton1|XButton2&quot;
	, scSymb := &quot;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|&quot;
		. &quot;20|21|22|23|24|25|26|27|28|29|2B|2C|2D|2E|2F|30|31|32|33|34|35&quot;
	, scNoSymb := &quot;1|E|F|1C|37|39|3A|3B|3C|3D|3E|3F|40|41|42|43|44|45|46|47|48|49|4A|4B|4C|4D|4E|4F|50|51|52|53|54|&quot;
		. &quot;57|58|63|64|65|66|67|68|69|6A|6B|6C|6D|6E|76|11C|135|147|148|149|14B|14D|14F|150|151|152|153|15D&quot;
	, vkOther := &quot;3|13|5F|60|61|62|63|64|65|66|67|68|69|6E|A6|A7|A8|A9|AA|AB|AC|AD|AE|AF|B0|B1|B2|B3|B4|B5|B6|B7&quot;
	#IF Hotkey_IsRegControl()
	#IF Hotkey_Hook(&quot;K&quot;)
	#IF Hotkey_Hook(&quot;M&quot;)
	#IF Hotkey_Hook(&quot;L&quot;) &amp;&amp; GetKeyState(&quot;RButton&quot;, &quot;P&quot;)
	#IF Hotkey_Hook(&quot;R&quot;)
	#IF Hotkey_Hook(&quot;J&quot;) &amp;&amp; !Hotkey_Main(&quot;GetMod&quot;)
	#IF Hotkey_Arr(&quot;Hook&quot;) &amp;&amp; !Hotkey_Hook(&quot;K&quot;)
	#IF
	Hotkey, IF, Hotkey_Hook(&quot;M&quot;)
	Loop, Parse, nmMouse, |
		Hotkey, % A_LoopField, Hotkey_View
	Hotkey, IF, Hotkey_Hook(&quot;K&quot;)
	Loop, Parse, nmMods, |
	{
		Hotkey, % A_LoopField, Hotkey_Mods
		Hotkey, % A_LoopField &quot; Up&quot;, Hotkey_ModsUp
	}
	Loop, Parse, scSymb, |
		Hotkey, % &quot;sc&quot; A_LoopField, Hotkey_ViewSC
	Loop, Parse, scNoSymb, |
		Hotkey, % GetKeyName(&quot;sc&quot; A_LoopField), Hotkey_View
	Loop, Parse, vkOther, |
		Hotkey, % GetKeyName(&quot;vk&quot; A_LoopField), Hotkey_View
	Hotkey, IF, Hotkey_Hook(&quot;L&quot;) &amp;&amp; GetKeyState(&quot;RButton&quot;`, &quot;P&quot;)
	Hotkey, LButton, Hotkey_View
	Hotkey, IF, Hotkey_Hook(&quot;R&quot;)
	Hotkey, RButton, Hotkey_View
	S_FormatInteger := A_FormatInteger
	SetFormat, IntegerFast, D
	Hotkey, IF, Hotkey_Hook(&quot;J&quot;) &amp;&amp; !Hotkey_Main(&quot;GetMod&quot;)
	Loop, 128
		Hotkey % Ceil(A_Index / 32) &quot;Joy&quot; Mod(A_Index - 1, 32) + 1, Hotkey_View
	SetFormat, IntegerFast, %S_FormatInteger%
	Hotkey, IF, Hotkey_IsRegControl()
	Hotkey, RButton, Hotkey_RButton
	Hotkey, RButton Up, Hotkey_Return
	Hotkey, IF, Hotkey_Arr(&quot;Hook&quot;) &amp;&amp; !Hotkey_Hook(&quot;K&quot;)
	Hotkey, AppsKey Up, Hotkey_Return
	Hotkey, +F10, Hotkey_Return
	Hotkey, IF
	Return

	Hotkey_RButton:
		Click
	Hotkey_Return:
		Return
}

Hotkey_IsRegControl() {
	Local Control
	MouseGetPos,,,, Control, 2
	Return Hotkey_ID(Control) != &quot;&quot;
}

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

Hotkey_EventFocus(hWinEventHook, event, hwnd) {
	Hotkey_ID(hwnd) != &quot;&quot; ? Hotkey_Main(&quot;Control&quot;, hwnd) : Hotkey_Main(&quot;Control&quot;)
}

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

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

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

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

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

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

Hotkey_ChangeOption(ID, Option) {
	Local Hwnd
	Hwnd := (ID + 0 != &quot;&quot;) ? ID : Hotkey_ID(ID)
	Return Hotkey_Options(Hwnd, Option)
}

Hotkey_Hook(Option) {
	Return Hotkey_Arr(&quot;Hook&quot;) &amp;&amp; !!InStr(Hotkey_Arr(&quot;Hook&quot;), Option)
}

Hotkey_Delete(ID, Destroy=0) {
	Local Hwnd, Name, hFocus, ControlNN
	(ID + 0 = &quot;&quot;) ? (Hwnd := Hotkey_ID(ID), Name := ID) : (Hwnd := ID, Name := Hotkey_ID(ID))
	Hotkey_ID(Hwnd, &quot;&quot;, 1), Hotkey_ID(Name, &quot;&quot;, 1)
	Hotkey_Value(Hwnd, &quot;&quot;, 1), Hotkey_Value(Name, &quot;&quot;, 1)
	Hotkey_Options(Hwnd, &quot;&quot;, 1)
	ControlGetFocus, ControlNN, A
	ControlGet, hFocus, Hwnd, , %ControlNN%, A
	(hFocus = Hwnd ? Hotkey_Main(&quot;Control&quot;) : 0)
	If Destroy
		DllCall(&quot;DestroyWindow&quot;, &quot;Ptr&quot;, Hwnd)
	Else
		PostMessage, 0x00CF, 0, , , % &quot;ahk_id&quot; Hwnd		;  EM_SETREADONLY
	Return Hwnd
}

Hotkey_Set(Name, Value=&quot;&quot;) {
	Text := Value = &quot;&quot; ? Hotkey_Arr(&quot;Empty&quot;) : Hotkey_HKToStr(Value)
	SendMessage, 0xC, 0, &amp;Text, , % &quot;ahk_id&quot; Hotkey_ID(Name)
	Return Hotkey_HKToStr(Value), Hotkey_Value(Name, Value)
}

Hotkey_Read(Name, Section = &quot;&quot;, FilePath = &quot;&quot;) {
	Local HK
	HK := Hotkey_IniRead(Name, Section, FilePath), Hotkey_Value(Name, HK)
	Return Hotkey_HKToStr(HK)
}

Hotkey_IniPath(Path = &quot;&quot;) {
	Return Path = &quot;&quot; ? Hotkey_Arr(&quot;IniPath&quot;) : Hotkey_Arr(&quot;IniPath&quot;, Path)
}

Hotkey_IniSection(Section = &quot;&quot;) {
	Return Section = &quot;&quot; ? Hotkey_Arr(&quot;IniSection&quot;) : Hotkey_Arr(&quot;IniSection&quot;, Section)
}

Hotkey_IniRead(Name, Section = &quot;&quot;, FilePath = &quot;&quot;) {
	Local Data
	IniRead, Data, % FilePath = &quot;&quot; ? Hotkey_IniPath() : FilePath, % Section = &quot;&quot; ? Hotkey_IniSection() : Section, % Name, % A_Space
	Return Data
}

Hotkey_IniWrite(ID, Section = &quot;&quot;, FilePath = &quot;&quot;) {
	Local Key
	Key := (ID + 0 = &quot;&quot;) ? ID : Hotkey_ID(ID)
	If (Key != &quot;&quot;)
		IniWrite, % Hotkey_Value(ID), % FilePath = &quot;&quot; ? Hotkey_IniPath() : FilePath, % Section = &quot;&quot; ? Hotkey_IniSection() : Section, % Key
}

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

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

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

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

	Local K, K1, K2, I, V, M, R
	RegExMatch(HK, &quot;S)^\s*([~\*\$\^\+!#&lt;&gt;]*)\{?(.*?)}?\s*$&quot;, K)
	If (K2 = &quot;&quot;)
		Return &quot;&quot; Hotkey_Arr(&quot;Empty&quot;)
	If (InStr(&quot;|&quot; K2, &quot;|sc&quot;, 1) || InStr(&quot;|&quot; K2, &quot;|vk&quot;, 1))
		K2 := Hotkey_Arr(&quot;OnlyEngSym&quot;) &amp;&amp; EngSym.HasKey(K2) ? EngSym[K2] : Format(&quot;{:U}&quot;, GetKeyName(K2))
	If (K1 != &quot;&quot;)
		For I, V in K1 ~= &quot;[&lt;&gt;]&quot; ? LRPrefix : Prefix
			K1 := StrReplace(K1, V[1], &quot;&quot;, R), R &amp;&amp; (M .= V[2] &quot;+&quot;)
	Return M . (StrLen(K2) = 1 ? Format(&quot;{:U}&quot;, K2) : K2)
}

Hotkey_HKToSend(HK, Section = &quot;&quot;, FilePath = &quot;&quot;) {
	Static LRPrefix := [[&quot;&lt;^&quot;,&quot;LCtrl&quot;],[&quot;&gt;^&quot;,&quot;RCtrl&quot;],[&quot;&lt;!&quot;,&quot;LAlt&quot;],[&quot;&gt;!&quot;,&quot;RAlt&quot;]
					,[&quot;&lt;+&quot;,&quot;LShift&quot;],[&quot;&gt;+&quot;,&quot;RShift&quot;],[&quot;&lt;#&quot;,&quot;LWin&quot;],[&quot;&gt;#&quot;,&quot;RWin&quot;]]
		, Prefix := [[&quot;^&quot;,&quot;LCtrl&quot;],[&quot;!&quot;,&quot;LAlt&quot;],[&quot;+&quot;,&quot;LShift&quot;],[&quot;#&quot;,&quot;LWin&quot;]]
	Local K, K1, K2, I, V, M1, M2, R
	If (HK = &quot;&quot;)
		Return
	If (Section != &quot;&quot;)
		IniRead, HK, % FilePath = &quot;&quot; ? Hotkey_IniPath() : FilePath, % Section, % HK, % A_Space
	RegExMatch(HK, &quot;S)^\s*([~\*\$\^\+!#&lt;&gt;]*)\{?(.*?)}?\s*$&quot;, K)
	If (K1 != &quot;&quot;)
		For I, V in K1 ~= &quot;[&lt;&gt;]&quot; ? LRPrefix : Prefix
			K1 := StrReplace(K1, V[1], &quot;&quot;, R)
			, R ? (M1 .= &quot;{&quot; V[2] &quot; Down}&quot;, M2 .= &quot;{&quot; V[2] &quot; Up}&quot;) : 0
	Return M1 . &quot;{&quot; K2 &quot;}&quot; . M2
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Fri, 24 Jun 2016 16:27:22 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=105523#p105523</guid>
		</item>
	</channel>
</rss>
