<?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>https://forum.script-coding.com/viewtopic.php?id=14472</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14472&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Визуализация нажатий клавиш».]]></description>
		<lastBuildDate>Tue, 08 Jan 2019 18:31:16 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130918#p130918</link>
			<description><![CDATA[<p>Но всё равно если быстро крутить колёсиком, иногда остаётся.<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#HotkeyInterval 0
#KeyHistory 0
#UseHook
#NoEnv
SetBatchLines -1
ListLines Off 
AutoTrim, Off
CoordMode, ToolTip	;	, Window

Sleep := 700		;	Задержка исчезновения после отпускания клавиши
Del := &quot; &gt; &quot;		;	Разделитель между именами клавиш
Mouse := 1			;	Определять нажатия мыши
PrefixHotkey = *~	;	Префикс горячей клавиши для команды Hotkey
BanKeys := &quot;&quot;		;	Список запрещённых клавиш
NumPadEqual := 0	;	Если равно нулю, выводить имена Numpad клавиш в зависимости от состояния NumLock

  ;	---------

Str := Del, oArr := {}
LenPrefix := StrLen(PrefixHotkey) + 1
NotUp:= &quot;vk9C|vk9D|vk9E|vk9F&quot; 
Extended := &quot;scF|sc7c|sc2B|sc56&quot;
NotVk := &quot;sc11C|sc147|sc148|sc149|sc14B|sc14D|sc14F|sc150|sc151|sc152|sc153&quot;
ScNum := &quot;sc53|sc52|sc4F|sc50|sc51|sc4B|sc4D|sc47|sc48|sc49|sc4C|sc59&quot;
oScToName := {sc53:&quot;NumpadDot&quot;,sc52:&quot;Numpad0&quot;,sc4F:&quot;Numpad1&quot;,sc50:&quot;Numpad2&quot;,sc51:&quot;Numpad3&quot;,sc4B:&quot;Numpad4&quot;
				, sc4D:&quot;Numpad6&quot;,sc47:&quot;Numpad7&quot;,sc48:&quot;Numpad8&quot;,sc49:&quot;Numpad9&quot;,sc4C:&quot;Numpad5&quot;,sc59:&quot;Numpad5&quot;}
If !Mouse
	BanKeys .= &quot;|vk1|vk2|vk4|vk5|vk6|vk9C|vk9D|vk9E|vk9F&quot;

Loop % 0xFF
{
	Key := Format(&quot;vk{:x}&quot;, A_Index)
	if InStr(&quot;|&quot; BanKeys &quot;|&quot;, &quot;|&quot; Key &quot;|&quot;) || InStr(&quot;|&quot; NotUp &quot;|&quot;, &quot;|&quot; Key &quot;|&quot;) 
		Continue
	Try Hotkey, % PrefixHotkey . Key . &quot; Up&quot;, HotkeysUp, On
	Try Hotkey, % PrefixHotkey . Key, Hotkeys, On
}
Loop, Parse, % Extended &quot;|&quot; NotVk &quot;|&quot; ScNum, |
{
	if InStr(&quot;|&quot; BanKeys &quot;|&quot;, &quot;|&quot; A_LoopField &quot;|&quot;) || InStr(&quot;|&quot; NotUp &quot;|&quot;, &quot;|&quot; A_LoopField &quot;|&quot;)
		Continue
	Try Hotkey, % PrefixHotkey . A_LoopField . &quot; Up&quot;, HotkeysUp, On
	Try Hotkey, % PrefixHotkey . A_LoopField, Hotkeys, On
}
Loop, Parse, % NotUp, |
{
	if InStr(&quot;|&quot; BanKeys &quot;|&quot;, &quot;|&quot; A_LoopField &quot;|&quot;)
		Continue
	Try Hotkey, % PrefixHotkey . A_LoopField, HotkeysNotUp, On  
}
Return

Esc::ExitApp

HotkeysNotUp:
	Critical
	KeyName := GetKeyName(SubStr(A_ThisHotkey, LenPrefix))
	Str .= KeyName . Del
	ToolTip % Str, 5, 5, 2
	funcobj := Func(&quot;KeyDelete&quot;).Bind(KeyName)
	SetTimer, % funcobj, -%Sleep% 
	Return

Hotkeys:
	If (oArr[A_ThisHotkey] != &quot;&quot;)
		Return
	ThisHotkey := SubStr(A_ThisHotkey, LenPrefix)
	If !NumPadEqual &amp;&amp; oScToName[ThisHotkey] &amp;&amp; GetKeyState(&quot;Numlock&quot;, &quot;T&quot;)
		KeyName := oScToName[ThisHotkey]
	Else
		KeyName := GetKeyName(ThisHotkey)
	Str .= (oArr[A_ThisHotkey] := KeyName) . Del
	ToolTip % Str, 5, 5, 2
	Return

HotkeysUp:
	Critical
	funcobj := Func(&quot;KeyDelete&quot;).Bind(oArr.Delete(SubStr(A_ThisHotkey, 1, -3)))
	SetTimer, % funcobj, -%Sleep% 
	Return 
	
KeyDelete(name) {
	Global Str, Del
	Str := StrReplace(Str, Del name Del, Del, , 1)
	ToolTip % Str, 5, 5, 2 
	If (Str = Del)
		ToolTip, , , , 2 
}
</code></pre></div><p>АП: Вроде Critical решает проблему, без него пропадают таймеры.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 08 Jan 2019 18:31:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130918#p130918</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130917#p130917</link>
			<description><![CDATA[<p>В 14 не остаются. Небольшая задержка, как и задумано и исчезают. Даже если сделать от 1 до 8, а не до 4.</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Tue, 08 Jan 2019 17:26:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130917#p130917</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130915#p130915</link>
			<description><![CDATA[<div class="quotebox"><cite>Foma пишет:</cite><blockquote><p>Вы написали, что совершенствовать Вам не интересно</p></blockquote></div><p>Я имел ввиду что переделывать визуализацию из тултипа во что то приличное. Если в 14 кнопки не остаются, то тоже самое на хоткеи не сложно переделать.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 08 Jan 2019 15:26:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130915#p130915</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130912#p130912</link>
			<description><![CDATA[<p>serzh82saratov, возможно я Вас не понял. Вы написали, что совершенствовать Вам не интересно, и я решил не вникать глубже, поскольку предыдущий вариант меня кажется(пока не скажу точно) вполне устраивает. </p><p>stealzy, спасибо, посмотрел. Она не делает то, что мне нужно:<br /></p><div class="quotebox"><blockquote><p>Мне нужно вывести на экран все нажимаемые, а также удерживаемые клавиши. Даже если 5 сразу или больше. Причём не только хоткеи, а любые, которые будут нажаты или удерживаемы.</p></blockquote></div><p>&nbsp; Наверное там можно что-то изменить, но мне такое не осилить.</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Tue, 08 Jan 2019 08:58:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130912#p130912</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130911#p130911</link>
			<description><![CDATA[<p>Плохо искали:<br /><a href="https://www.autohotkey.com/boards/viewtopic.php?t=225">KeypressOSD</a></p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Tue, 08 Jan 2019 07:40:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130911#p130911</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130907#p130907</link>
			<description><![CDATA[<p>Странное общение получается, а про то как код из 14 поста работает, рассказывать уже лишнее...</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 07 Jan 2019 17:34:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130907#p130907</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130906#p130906</link>
			<description><![CDATA[<p>На минуты точно.</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Mon, 07 Jan 2019 17:14:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130906#p130906</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130900#p130900</link>
			<description><![CDATA[<div class="quotebox"><cite>Foma пишет:</cite><blockquote><p>остаются на длительное время</p></blockquote></div><p>На полсекунды, или пока снова их не нажмешь?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 06 Jan 2019 20:16:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130900#p130900</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130895#p130895</link>
			<description><![CDATA[<p>Скорее всего конфликт с другими запущенными скриптами.<br />После первой версии я как раз это и исправлял, у меня ни разу такого нет.<br />Попробуйте нажимать только клавиши 1 2 3 4, и после тоже самое попробуйте с этим кодом.<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1
AutoTrim, Off
CoordMode, ToolTip

Global Str := &quot; &gt; &quot;
oArr := {}
Sleep := 500

#If !oArr[A_ThisHotkey]
~1::
~2::
~3::
~4::
	name := SubStr(A_ThisHotkey, 2)
	oArr[A_ThisHotkey] := 1
	Str .= name &quot; &gt; &quot;
	ToolTip % Str, 5, 5, 2
	Return
#If

~1 Up::
~2 Up::
~3 Up::
~4 Up:: 
	name := SubStr(A_ThisHotkey, 1, -3)
	oArr[name] := 0   
	funcobj := Func(&quot;KeyDelete&quot;).Bind(SubStr(name, 2))
	SetTimer, % funcobj, -%Sleep% 
	Return  

KeyDelete(name) { 
	Str := StrReplace(Str, &quot; &gt; &quot; name &quot; &gt; &quot;, &quot; &gt; &quot;, , 1)
	ToolTip % Str, 5, 5, 2 
	If (Str = &quot; &gt; &quot;)
		ToolTip, , , , 2 
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 06 Jan 2019 18:46:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130895#p130895</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130894#p130894</link>
			<description><![CDATA[<p>Уже отпущенные клавиши в ToolTip остаются на длительное время.</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Sun, 06 Jan 2019 17:38:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130894#p130894</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130886#p130886</link>
			<description><![CDATA[<p>Кто остаются?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 06 Jan 2019 09:29:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130886#p130886</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130885#p130885</link>
			<description><![CDATA[<p>В последнем все остаются.</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Sun, 06 Jan 2019 09:23:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130885#p130885</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130884#p130884</link>
			<description><![CDATA[<p>Я ещё сделал сразу вариант с задержкой отпусканий, ну а совершенствовать код мне пока не интересно <br /></p><div class="quotebox"><blockquote><p>некоторые клавиши тоже остаются выведенными</p></blockquote></div><p>У меня и в том и в этом варианте ни разу такого не было.<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1
AutoTrim, Off
CoordMode, ToolTip

DllCall(&quot;PostMessage&quot;, &quot;Ptr&quot;, A_ScriptHWND, &quot;UInt&quot;, 0x50, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0x409) ; eng layout

hHookKeybd := DllCall(&quot;SetWindowsHookEx&quot;
	, Int, WH_KEYBOARD_LL := 13
	, Ptr, RegisterCallback(&quot;LowLevelKeyboardProc&quot;, &quot;Fast&quot;)
	, Ptr, DllCall(&quot;GetModuleHandle&quot;, UInt, 0, Ptr)
	, UInt, 0, Ptr)
OnExit(Func(&quot;Exit&quot;).Bind(hHookKeybd))
Return

Esc::ExitApp

Exit(hHookKeybd)  {
	DllCall(&quot;UnhookWindowsHookEx&quot;, Ptr, hHookKeybd)
}
   
LowLevelKeyboardProc(nCode, wParam, lParam)  {
	static oMem := [], lpData, size := VarSetCapacity(lpData, 16 + A_PtrSize*2, 0)

	DllCall(&quot;RtlMoveMemory&quot;, Ptr, &amp;lpData, Ptr, lParam, Ptr, size)
	oMem.Push([wParam, &amp;lpData])
	timer := Func(&quot;EventHandling&quot;).Bind(oMem)  ; во избежание фризов клавиатуры обработка событий должна
	SetTimer, % timer, -10                     ; происходить обязательно по таймеру, а не в теле этой функции
	Return DllCall(&quot;CallNextHookEx&quot;, Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
}

EventHandling(oMem)  {
	static oMembers := [&quot;vk&quot;, &quot;sc&quot;, &quot;flags&quot;]
		, oFlagOffsets := {LLKHF_EXTENDED: 0, LLKHF_UP: 7}
		, oArr := {}, Str := &quot; &gt; &quot;, Sleep := 500
		
	if !isobject(oMem)
		goto KeyDelete
		
	while (oMem[1] != &quot;&quot;)   {
		key := oMem.RemoveAt(1)
		lp := key[2]
		for k, v in oMembers
			%v% := NumGet(lp + (k - 1)*4, &quot;UInt&quot;)
		for k, v in oFlagOffsets
			%k% := (flags &gt;&gt; v) &amp; 1  
		sc |= LLKHF_EXTENDED &lt;&lt; 8
		vkCode := Format(&quot;vk{:X}&quot;, vk) 
		scCode := Format(&quot;sc{:X}&quot;, sc)
		If !LLKHF_UP &amp;&amp; (oArr[vkCode . scCode] = &quot;&quot;)
		{
			Str .= (oArr[vkCode . scCode] := GetKeyName(vkCode . scCode)) &quot; &gt; &quot;
			SetTimer, KeyState, -1
		}
		ToolTip % Str, 5, 5, 2
	}
	Return
	
	KeyState:  
		If !oArr.Count()
		{
			SetTimer, KeyState, Off
			Return
		}
		For key, name in oArr
		{
			If GetKeyState(name, &quot;P&quot;)
				Continue
			oArr.Delete(key)
			funcobj := Func(&quot;EventHandling&quot;).Bind(name)
			SetTimer, % funcobj, -%Sleep%
		}
		SetTimer, KeyState, -1 
		Return  
		
	KeyDelete: 
		Str := StrReplace(Str, &quot; &gt; &quot; oMem &quot; &gt; &quot;, &quot; &gt; &quot;, , 1)
		ToolTip % Str, 5, 5, 2 
		If (Str = &quot; &gt; &quot;)
			ToolTip, , , , 2 
		Return
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 06 Jan 2019 09:16:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130884#p130884</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130882#p130882</link>
			<description><![CDATA[<p>Меня в принципе в таком виде всё устраивает, но если Вам интересно довести код до совершенства:<br />1. Один разделитель в ToolTip остаётся после прекращения всех нажатий<br />2. Если нажатий много одновременно, то некоторые клавиши тоже остаются выведенными, как будто всё ещё нажаты. Пропадают после повторного их нажатия и отпускания.</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Sun, 06 Jan 2019 08:52:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130882#p130882</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Визуализация нажатий клавиш]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130878#p130878</link>
			<description><![CDATA[<p>Попробовал. Замечательно работает, спасибо.<br />Подумаю надо ли добавить какую-то минимальную задержку, чтобы клавиши которые были быстро отпущены не исчезали мгновенно.</p>]]></description>
			<author><![CDATA[null@example.com (Foma)]]></author>
			<pubDate>Sat, 05 Jan 2019 21:49:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130878#p130878</guid>
		</item>
	</channel>
</rss>
