<?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=11700</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11700&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Конфликт скриптов».]]></description>
		<lastBuildDate>Fri, 10 Jun 2016 00:42:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Конфликт скриптов]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=105057#p105057</link>
			<description><![CDATA[<p>Пожалуйста, подскажите как исправить конфликт скриптов?<br />Первый скрипт состоит из простого hotstring&#039;а<br /></p><div class="codebox"><pre><code>:*?:...::…</code></pre></div><p>Второй скрипт - Capitalize.ahk:<br /></p><div class="codebox"><pre><code>#NoEnv
#SingleInstance, Force
StringCaseSense, Locale	; Without this the &#039;If var Is Lower/Upper&#039; checks will fail for Cyrillic.
 
SetKeyDelay, -1
endChars := &quot;?!.…{Enter}&quot;	; List of keys to trigger capitalizing after them.
GroupAdd, ExcludedWindows, ahk_exe explorer.exe
 
SetFormat, Integer, Hex
 
Global capNextChar
Global scanCodesCharMap := {0x10: &quot;й&quot;, 0x11: &quot;ц&quot;, 0x12: &quot;у&quot;, 0x13: &quot;к&quot;, 0x14: &quot;е&quot;, 0x15: &quot;н&quot;, 0x16: &quot;г&quot;, 0x17: &quot;ш&quot;, 0x18: &quot;щ&quot;, 0x19: &quot;з&quot;, 0x1A: &quot;х&quot;, 0x1B: &quot;ъ&quot;, 0x1E: &quot;ф&quot;, 0x1F: &quot;ы&quot;, 0x20: &quot;в&quot;, 0x21: &quot;а&quot;, 0x22: &quot;п&quot;, 0x23: &quot;р&quot;, 0x24: &quot;о&quot;, 0x25: &quot;л&quot;, 0x26: &quot;д&quot;, 0x27: &quot;ж&quot;, 0x28: &quot;э&quot;, 0x29: &quot;ё&quot;, 0x2C: &quot;я&quot;, 0x2D: &quot;ч&quot;, 0x2E: &quot;с&quot;, 0x2F: &quot;м&quot;, 0x30: &quot;и&quot;, 0x31: &quot;т&quot;, 0x32: &quot;ь&quot;, 0x33: &quot;б&quot;, 0x34: &quot;ю&quot;}
 
Hotkey, IfWinNotActive, ahk_group ExcludedWindows
 
For k In scanCodesCharMap	; Register hotkeys for each mentioned scan code.
{
	funcObj%k% := Func(&quot;capitalize&quot;).Bind(k)
	Hotkey, % &quot;sc&quot; k, % funcObj%k%
}
 
; Hook to &#039;Space&#039; key.
funcObjSpace := Func(&quot;capitalize&quot;)	;.Bind(&quot; &quot;)
Hotkey, Space, % funcObjSpace
 
SendLevel, 2
Loop	; Listen to input keys, look for &#039;endChars&#039; to be sent, to set a token &#039;capNextChar&#039; to capitalize next char.
{
	Input, key, C E L1 V, % endChars
	capNextChar := (key == &quot; &quot; ? capNextChar : (InStr(ErrorLevel, &quot;EndKey:Enter&quot;) ? 2 : InStr(ErrorLevel, &quot;EndKey:&quot;)))
}
 
capitalize(input = &quot;&quot;)	; The function that decides whether to and how to transform the input keys.
; input - scan code of an input key.
{
	If !(input)
	{
		capNextChar *= 2	; Mark spaces being sent after the end chars by doubling the variable&#039;s value.
		Send, {Space}
		Return
	}
	isCurrLayoutRu := (DllCall(&quot;GetKeyboardLayout&quot;, Ptr, DllCall(&quot;GetWindowThreadProcessId&quot;, Ptr, WinExist(&quot;A&quot;), UInt, 0, Ptr), Ptr) &amp; 0xFFFF == 0x409 ? 0 : 1)	; Get current keyboard layout. https://msdn.microsoft.com/en-us/goglobal/bb896001 0x0409 - en-US English (United States), so we just assume that if current layout is not this one - then it&#039;s probably ru.
	sendMe := (isCurrLayoutRu ? scanCodesCharMap[input] : GetKeyName(&quot;sc&quot; input))	; Transform the key&#039;s scan code into a char to send (either english or russian, depending on the check on the previous line).
	If (capNextChar &gt; 1)	; Means that an end char has fired and there was at least one space after it.
		StringUpper, sendMe, sendMe	; Capitalize the key.
	Send, % sendMe
}
 
isCurrLayoutRu()
{
	Return (DllCall(&quot;GetKeyboardLayout&quot;, Ptr, DllCall(&quot;GetWindowThreadProcessId&quot;, Ptr, WinExist(&quot;A&quot;), UInt, 0, Ptr), Ptr) &amp; 0xFFFF == 0x409 ? 0 : 1)	
}</code></pre></div><p>Конфликтуют они так, что если сначала запустить скрипт с hotstring&#039;ом, а потом запустить Capitalize.ahk - то hotstring перестаёт срабатывать.<br />Если запустить скрипты в обратном порядке, то если через точку набирать любые буквы (например, &quot;а.а.а.а.а.а&quot;), то часть букв будут съедаться hotstring&#039;ом, превращаясь в троеточие.</p><p>При этом если вышеуказанный hotstring разместить в теле Capitalize.ahk - баги пропадают.</p><p>Баги воспроизводятся очень часто, но не всегда.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Fri, 10 Jun 2016 00:42:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=105057#p105057</guid>
		</item>
	</channel>
</rss>
