<?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=8072</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8072&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Исправление набранного в неверной раскладке текста».]]></description>
		<lastBuildDate>Sat, 04 Feb 2017 13:53:48 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111852#p111852</link>
			<description><![CDATA[<p><strong>teadrinker</strong> думаю другое имеется ввиду, бывает что в слепую набираешь в одной расскладке, а потом и в другой. Можно в основной код добавить эти функции.<br /></p><div class="codebox"><pre><code>
СhangedKeysLocale()
{
	Static Chars := &quot;ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю,.&quot;&quot;№;?&quot;
				.   &quot;~QWERTYUIOP{}ASDFGHJKL:&quot;&quot;ZXCVBNM&lt;&gt;``qwertyuiop[]asdfghjkl;&#039;zxcvbnm,.?/@#$&amp;&quot;
	SelText := GetWord(TempClipboard)
	Loop, parse, SelText
      NewText .= (found := InStr(Chars, A_LoopField, 1))
         ? SubStr(Chars, found - 72, 1) : A_LoopField
	If (SelText = &quot;&quot; || NewText = &quot;&quot; || SelText == NewText)
		Return 1, Clipboard := TempClipboard
	Clipboard := NewText
	SendInput, ^{vk56}
	Sleep, 100
	Clipboard := TempClipboard
	ToggleLocale()
}

ToggleLocale()
{
	Static WM_INPUTLANGCHANGEREQUEST := 0x50
	InputLocale := (DllCall(&quot;GetKeyboardLayout&quot;, &quot;Int&quot;
	, DllCall(&quot;GetWindowThreadProcessId&quot;, &quot;Ptr&quot;, WinExist(&quot;A&quot;), &quot;Int&quot;, &quot;0&quot;)) &amp; 0x0000FFFF)
	ControlGetFocus, CtrlFocus
	PostMessage, WM_INPUTLANGCHANGEREQUEST, 0, InputLocale = 0x409 ? 0x419 : 0x409, %CtrlFocus%
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 04 Feb 2017 13:53:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111852#p111852</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111799#p111799</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?pid=82490#p82490">http://forum.script-coding.com/viewtopi … 490#p82490</a></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 02 Feb 2017 12:53:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111799#p111799</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111797#p111797</link>
			<description><![CDATA[<p>Помогите, пожалуйста, изменить ф-ию таким образом, чтобы весь выделенный текст заменялся на противоположный. Например, текст &quot;<strong>Привет! Rfr ltkf&amp;</strong>&quot; заменялся на &quot;<strong>Ghbdtn! Как дела?</strong>&quot;.<br /></p><div class="codebox"><pre><code>transformTextLayout(textContainer)
{
	en := &quot;``qwertyuiop[]asdfghjkl;&#039;zxcvbnm,./~@#$^&amp;QWERTYUIOP{}|ASDFGHJKL:&quot;&quot;ZXCVBNM&lt;&gt;?&quot;
	ru := &quot;ёйцукенгшщзхъфывапролджэячсмитьбю.Ё&quot;&quot;№;:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,&quot;
	textContainer ~= &quot;i)[a-z]&quot; ? (layoutIn := en, layoutOut := ru) : (layoutIn := ru, layoutOut := en)
	Loop, Parse, textContainer
	{
		IfNotInString, layoutIn, %A_LoopField%
			newChar := A_LoopField
		Else
			StringReplace, newChar, A_LoopField, %A_LoopField%, % SubStr(layoutOut, InStr(layoutIn, A_LoopField, True), 1)
		outputStr .= newChar
	}
	Return outputStr
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (becauseim)]]></author>
			<pubDate>Thu, 02 Feb 2017 12:25:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111797#p111797</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69723#p69723</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>я не очень понял сути изменений - код просто перетасован ради ре-группировки? Так получилось только в 2 раза длинней.</p></blockquote></div><p>&nbsp; &nbsp;По длинне <strong>ровно</strong> также, проверьте ещё раз (включена метка SwitchLocale).<br />&nbsp; &nbsp;А суть в концепции - нелазить и искать хоткеи самому, и облегчить &quot;вникание&quot; новым пользователям <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />&nbsp; &nbsp;Если у программы нет интерфейса, так пусть хотя-бы хоткеи не надо будет вспоминать и искать, особенно когда их много в чужом коде.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Fri, 22 Feb 2013 19:52:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69723#p69723</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69714#p69714</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Погорячился... Хотя непонимаю зачем ждать отпускания перед началом действия? Нажимаешь ведь для действия, а если нажал и передумал, то всё равно отпустишь, и оно...</p></blockquote></div><p>использованные мной хоткеи содержат ctrl и shift, а они же участвуют далее в скрипте с командами Send. Это приводит к конфликту, если не дождаться keywait&#039;а.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Хмм... Наверное чтобы нажатия не послать в текст. Тут конечно :facepalm:</p></blockquote></div><p>не, там же используются кнопки-модификаторы, на текст бы они не повлияли. Вся проблема в этих ctrl+c, ctrl+v и т.д.: если у тебя уже зажат ctrl, то send сработает криво, &quot;отжав&quot; его (и не знаю зажмёт ли его ещё после этого), и вместо ctrl+c отправится c.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Взял на вооружение:</p></blockquote></div><p>я не очень понял сути изменений - код просто перетасован ради ре-группировки? Так получилось только в 2 раза длинней.<br /></p><div class="quotebox"><cite>Zohann пишет:</cite><blockquote><p>Я уж 150 лет использую Punto, но интересно стало, равноценная ли замена будет ему?</p></blockquote></div><p>Однозначно нет.<br /></p><div class="quotebox"><cite>Zohann пишет:</cite><blockquote><p>В чем плюсы и минусы?</p></blockquote></div><p>Мой скрипт, вероятно, будет жрать меньше памяти (~7.5Mb), но зато менее функционален, возможны баги, не имеет интерфейса.<br /></p><div class="quotebox"><cite>Zohann пишет:</cite><blockquote><p>Автопереключение вряд ли реализовано?</p></blockquote></div><p>Если понимать под ним автоматическое распознание слов при печати так, чтобы они сразу в нужной кодировке печатались - то такого, конечно, нет.<br />А если имелось в виду переключение раскладки при срабатывании хоткея - то я выше уже сказал как её приделать.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Fri, 22 Feb 2013 10:53:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69714#p69714</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69708#p69708</link>
			<description><![CDATA[<p>Я уж 150 лет использую Punto, но интересно стало, равноценная ли замена будет ему? В чем плюсы и минусы? Автопереключение вряд ли реализовано?</p>]]></description>
			<author><![CDATA[null@example.com (Zohann)]]></author>
			<pubDate>Fri, 22 Feb 2013 07:51:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69708#p69708</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69700#p69700</link>
			<description><![CDATA[<p>Погорячился... Хотя непонимаю зачем ждать отпускания перед началом действия? Нажимаешь ведь для действия, а если нажал и передумал, то всё равно отпустишь, и оно...</p><p>Может так:<br /></p><div class="codebox"><pre><code>
&lt;^&lt;+Space::KeyWait(&quot;Конвертировать_весь_текст&quot;, &quot;LCtrl|LShift|Space&quot;)

; если не надо ждать, то кнопки неуказывать 
; &lt;^&lt;+Space::KeyWait(&quot;Конвертировать_весь_текст&quot;)     будет как Gosub
; или можно указать одну кнопку, или до кучи ту которой нет в комбинации, но мешается под рукой :)

; \|/\|/\|/\|/\|/\|/\|/\|/\|/ где-то глубоко \|/\|/\|/\|/\|/\|/\|/\|/\|/

Конвертировать_весь_текст:
    MsgBox ok     
    Return


KeyWait(Label, Buttons = &quot;&quot;) {
    Loop, Parse, Buttons, |
        KeyWait, %A_LoopField%
    Gosub, %Label%
}
</code></pre></div><p>чтобы &quot;вниз не лазить&quot; неискушенным пользователям <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="quotebox"><blockquote><p>то всё равно отпустишь, и оно...</p></blockquote></div><p>Хмм... Наверное чтобы нажатия не послать в текст. Тут конечно :facepalm:</p><br /><br /><br /><br /><p>Взял на вооружение:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>

#UseHook
Goto, Start

&gt;^&gt;+Space::KeyWait(&quot;Transform_all_text&quot;, &quot;RCtrl|RShift|Space&quot;)
&gt;+Space::KeyWait(&quot;Transform_only_last_line&quot;, &quot;RShift|Space&quot;)
&gt;^&gt;!Space::KeyWait(&quot;Transform_only_right_part&quot;, &quot;RCtrl|RAlt|Space&quot;)
&gt;^Space::KeyWait(&quot;Transform_only_left_part&quot;, &quot;RCtrl|Space&quot;)
&gt;!Space::KeyWait(&quot;Transform_only_last_word&quot;, &quot;RAlt|Space&quot;)
;KeyWait(&quot;SwitchLocale&quot;)                                                            

 ; --------------------------------------------------------------------------------------------
Start:
    #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
    SendMode Input 
    StringCaseSense, On
    #SingleInstance, Force
    SetBatchLines, -1
    SetKeyDelay, 10
    en := &quot;``qwertyuiop[]asdfghjkl;&#039;zxcvbnm,./~@#$^&amp;QWERTYUIOP{}|ASDFGHJKL:&quot;&quot;ZXCVBNM&lt;&gt;?&quot;
    ru := &quot;ёйцукенгшщзхъфывапролджэячсмитьбю.Ё&quot;&quot;№;:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,&quot;
    Return
    
Transform_all_text:                ; Transform all text
    savedClip := Clipboard
    Sleep 1
    Send ^{vk41}^{vk43}
    Sleep 1
    Clipboard := transformTextLayout(Clipboard)
    Sleep 1
    Send ^{vk56}
    Clipboard := savedClip
    savedClip := &quot;&quot;
    Return

Transform_only_last_line:                ; Transform only last line (full line)
    savedClip := Clipboard
    Sleep 1
    Send {End}+{Home}^{vk43}
    Sleep 1
    Clipboard := transformTextLayout(Clipboard)
    Sleep 1
    Send ^{vk56}
    Clipboard := savedClip
    savedClip := &quot;&quot;
    Return

Transform_only_left_part:                ; Transform only (left) part of a line (from the beginning of the line to the caret)
    savedClip := Clipboard
    Sleep 1
    Send +{Home}^{vk43}
    Sleep 1
    Clipboard := transformTextLayout(Clipboard)
    Sleep 1
    Send ^{vk56}
    Clipboard := savedClip
    savedClip := &quot;&quot;
    Return

Transform_only_left_right:                ; Transform only (right) part of a line (from the beginning of the line to the caret)
    savedClip := Clipboard
    Sleep 1
    Send +{End}^{vk43}
    Sleep 1
    Clipboard := transformTextLayout(Clipboard)
    Sleep 1
    Send ^{vk56}
    Clipboard := savedClip
    savedClip := &quot;&quot;
    Return

Transform_only_last_word:                ; Transform only last word
    savedClip := Clipboard
    Sleep 1
    Loop
    {
        Send ^+{Left}
        If A_LoopField = 1
            Continue
        Else
            Send ^{vk43}
        Sleep 1
        IfInString, Clipboard, %A_Space%
        {
            Send ^+{Right}^{vk43}
            Sleep 1
            Break
        }
    }
    Clipboard := transformTextLayout(Clipboard)
    Sleep 1
    Send ^{vk56}
    Clipboard := savedClip
    savedClip := &quot;&quot;
    Return

transformTextLayout(textContainer)
    {
        Global en, ru
        textContainer ~= &quot;i)[a-z]&quot; ? (layoutIn := en, layoutOut := ru) : (layoutIn := ru, layoutOut := en)
        Loop, Parse, textContainer
        {
            IfNotInString, layoutIn, %A_LoopField%
                newChar := A_LoopField
            Else
                StringReplace, newChar, A_LoopField, %A_LoopField%, % SubStr(layoutOut, InStr(layoutIn, A_LoopField, True), 1)
            outputStr .= newChar
        }
        textContainer := outputStr
        outputStr := layoutIn := layoutOut := newChar := &quot;&quot;
        Return textContainer
    }
    
SwitchLocale:
    WinGet,ID,id,A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, ID, UInt, 0)
    InputLocaledID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
    if % InputLocaledID=Localed1
        SendMessage,0x50,0,%Localed2%,,ahk_id %ID%
    else if % InputLocaledID=Localed2
        SendMessage,0x50,0,%Localed1%,,ahk_id %ID%
    else
        SendMessage,0x50,0,%Localed2%,,ahk_id %ID%
    MouseGetPos,x,y
    InputLocaledID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
    CoordMode,tooltip,Relative
    if % InputLocaledID=Localed1
        ToolTip,Английский,A_CaretX+10,A_CaretY-20,3
    else if % InputLocaledID=Localed2
        ToolTip,Русский,A_CaretX+10,A_CaretY-20,3
    CoordMode,tooltip,Screen
    SetTimer,RemoveToolTip,1000
    return
    RemoveToolTip:
    ToolTip
    return
    
KeyWait(Label, Buttons = &quot;&quot;) {
    Loop, Parse, Buttons, |
        KeyWait, %A_LoopField%
    Gosub, %Label%
}

</code></pre></div></div></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Fri, 22 Feb 2013 01:52:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69700#p69700</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69699#p69699</link>
			<description><![CDATA[<p>Спасибо за замечания.<br />Я тоже думал как бы проще сократить код, но в итоге решил, что оно того не стоит как раз из-за того, что у каждого свои keywait&#039;ы.<br />Я не очень понимаю как ваш код<br /></p><div class="codebox"><pre><code>KeyWait, % LTrim( A_ThisHotkey, &quot;+|^|#|&gt;|$|&lt;|!&quot;)</code></pre></div><p>или другой со Space UP заменят мои keywait&#039;ы - ведь их же надо несколько, на каждую кнопку по одному. Ведь последней кнопкой пользователь может отпустить не обязательно пробел, а какой-то модификатор (ктрл-шифт-альт), а к тому времени уже будет исполняться скрипт.<br />Про регистр букв думаю можно и добавить, но толь не ещё 5 хоткеев, а только 1 (типа shift+capslock), который будет работать только с выделенным текстом.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Fri, 22 Feb 2013 00:39:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69699#p69699</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69694#p69694</link>
			<description><![CDATA[<p>Хорошо бы ещё добавить изменение регистра букв. Иногда с зажатым капслоком тоже бывает нехорошо выходит <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p><strong>OFF:</strong><br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="quotebox"><blockquote><p>p.p.s.: если вам захочется сменить хоткеи на свои - не забудьте также сменить и KeyWait&#039;ы в этих хоткеях.</p></blockquote></div><p>Может просто KeyWait, % LTrim( A_ThisHotkey, &quot;+|^|#|&gt;|$|&lt;|!&quot;) . Разве не сгодится?<br />И если в скрипте много подпрограмм, непроще приводить список сверху ввиде:<br /></p><div class="codebox"><pre><code>
$&gt;^&gt;+Space::Goto, Конвертировать_весь_текст
;+Space::Goto, Конвертировать_только_всю_строку 
;^Space::Goto, Конвертировать_только_левую_часть_строки 

;****

Конвертировать_весь_текст:
KeyWait, % LTrim( A_ThisHotkey, &quot;+|^|#|&gt;|$|&lt;|!&quot;)
MsgBox %A_ThisHotkey% х конвертировать_весь_текст
Return
</code></pre></div><p>Не сочтите за замечание, делали для себя, но оно вроде через Nмесяцев удобнее будет самому редактировать. Не разбирать потом зачем эта метка и для чего.</p><p>--------------</p><p>Вот и я перемудрил с KeyWait, % LTrim( A_ThisHotkey, &quot;+|^|#|&gt;|$|&lt;|!&quot;)<br />Достаточно просто записать как:<br /></p><div class="quotebox"><blockquote><p>$&gt;^&gt;+Space<strong>&nbsp; UP</strong>::Goto, Конвертировать_весь_текст</p></blockquote></div></div></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 21 Feb 2013 19:47:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69694#p69694</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69692#p69692</link>
			<description><![CDATA[<p>Переделал свой скрипт так, что теперь есть не 1, а 5 разных хоткеев:<br /><strong>RCtrl</strong>+<strong>RShift</strong>+<strong>Space</strong> - конвертировать весь текст (работает через отправку Ctrl+A)<br /><strong>RShift</strong>+<strong>Space</strong> - конвертировать только всю строку (работает через отправку End, Shift+Home)<br /><strong>RCtrl</strong>+<strong>Space</strong> - конвертировать только (левую) часть строки: от начала строки до каретки (работает через отправку Shift+Home)<br /><strong>RCtrl</strong>+<strong>RAlt</strong>+<strong>Space</strong> - конвертировать только (правую) часть строки: от каретки до конца строки (работает через отправку Shift+End)<br /><strong>RAlt</strong>+<strong>Space</strong> - конвертировать только последнее слово (словом считается любая группа символов не содержащая пробел) [если в текстовом поле всего 1 строка из 1 слова, то скрипт &quot;залипнет&quot;, чтобы он &quot;отлип&quot; надо нажать Esc]<br /></p><div class="codebox"><pre><code>#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
StringCaseSense, On
#SingleInstance, Force
SetBatchLines, -1
SetKeyDelay, 10

en := &quot;``qwertyuiop[]asdfghjkl;&#039;zxcvbnm,./~@#$^&amp;QWERTYUIOP{}|ASDFGHJKL:&quot;&quot;ZXCVBNM&lt;&gt;?&quot;
ru := &quot;ёйцукенгшщзхъфывапролджэячсмитьбю.Ё&quot;&quot;№;:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,&quot;

; Transform all text
$&gt;^&gt;+Space::
KeyWait RCtrl
KeyWait RShift
KeyWait Space
savedClip := Clipboard
Sleep 1
Send ^{vk41}^{vk43}
Sleep 1
Clipboard := transformTextLayout(Clipboard)
Sleep 1
Send ^{vk56}
Clipboard := savedClip
savedClip := &quot;&quot;
Return

; Transform only last line (full line)
$&gt;+Space::
KeyWait RShift
KeyWait Space
savedClip := Clipboard
Sleep 1
Send {End}+{Home}^{vk43}
Sleep 1
Clipboard := transformTextLayout(Clipboard)
Sleep 1
Send ^{vk56}
Clipboard := savedClip
savedClip := &quot;&quot;
Return

; Transform only (left) part of a line (from the beginning of the line to the caret)
$&gt;^Space::
KeyWait RCtrl
KeyWait Space
savedClip := Clipboard
Sleep 1
Send +{Home}^{vk43}
Sleep 1
Clipboard := transformTextLayout(Clipboard)
Sleep 1
Send ^{vk56}
Clipboard := savedClip
savedClip := &quot;&quot;
Return

; Transform only (right) part of a line (from the beginning of the line to the caret)
$&gt;^&gt;!Space::
KeyWait RCtrl
KeyWait RAlt
KeyWait Space
savedClip := Clipboard
Sleep 1
Send +{End}^{vk43}
Sleep 1
Clipboard := transformTextLayout(Clipboard)
Sleep 1
Send ^{vk56}
Clipboard := savedClip
savedClip := &quot;&quot;
Return

; Transform only last word
$&gt;!Space::
KeyWait RAlt
KeyWait Space
savedClip := Clipboard
Sleep 1
Loop
{
    If GetKeyState(&quot;Esc&quot;, &quot;P&quot;)
        Exit
    Send ^+{Left}
    If A_LoopField = 1
        Continue
    Else
        Send ^{vk43}
    Sleep 1
    IfInString, Clipboard, %A_Space%
    {
        Send ^+{Right}^{vk43}
        Sleep 1
        Break
    }
}
Clipboard := transformTextLayout(Clipboard)
Sleep 1
Send ^{vk56}
Clipboard := savedClip
savedClip := &quot;&quot;
Return

transformTextLayout(textContainer)
{
    Global en, ru
    textContainer ~= &quot;i)[a-z]&quot; ? (layoutIn := en, layoutOut := ru) : (layoutIn := ru, layoutOut := en)
    Loop, Parse, textContainer
    {
        IfNotInString, layoutIn, %A_LoopField%
            newChar := A_LoopField
        Else
            StringReplace, newChar, A_LoopField, %A_LoopField%, % SubStr(layoutOut, InStr(layoutIn, A_LoopField, True), 1)
        outputStr .= newChar
    }
    textContainer := outputStr
    outputStr := layoutIn := layoutOut := newChar := &quot;&quot;
    Return textContainer
}</code></pre></div><p>Т.к. я заметил, что при печатании текста я использую только левые shift/alt/ctrl, то все хоткеи с этими клавишами были намерено переделаны под правые shift/alt/ctrl во избежание случайных срабатываний (да, заметил, что они у меня случались).</p><p>Я не стал пока в свой скрипт добавлять автоматическое переключение раскладки при срабатывании хоткеев, но тот, кому это нужно - может добавить в код для нужных хоткеев<br /></p><div class="codebox"><pre><code>Gosub, SwitchLocale</code></pre></div><p>а куда-то в конец скрипта добавить<br /></p><div class="codebox"><pre><code>SwitchLocale:
WinGet,ID,id,A
ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, ID, UInt, 0)
InputLocaledID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if % InputLocaledID=Localed1
  SendMessage,0x50,0,%Localed2%,,ahk_id %ID%
else if % InputLocaledID=Localed2
  SendMessage,0x50,0,%Localed1%,,ahk_id %ID%
else
  SendMessage,0x50,0,%Localed2%,,ahk_id %ID%
MouseGetPos,x,y
InputLocaledID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
CoordMode,tooltip,Relative
if % InputLocaledID=Localed1
  ToolTip,Английский,A_CaretX+10,A_CaretY-20,3
else if % InputLocaledID=Localed2
  ToolTip,Русский,A_CaretX+10,A_CaretY-20,3
CoordMode,tooltip,Screen
SetTimer,RemoveToolTip,1000
return</code></pre></div><p>Этот кусок кода пока не проверялся мною на работоспособность, я просто позаимствовал его у <strong>Alectric</strong> (из предыдущего сообщения).</p><p>p.s.: хочу добавить, что ClipWait у меня в коде не используется, т.к. у меня он ну совсем не работает, а если его заменить на Sleep,1 - всё начинает нормально работать (даже при таком маленьком интервале в 1мс, но если его мало для вашей машины - рекомендую увеличить его до 15-20мс).<br />p.p.s.: если вам захочется сменить хоткеи на свои - не забудьте также сменить и KeyWait&#039;ы в этих хоткеях.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Thu, 21 Feb 2013 19:16:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69692#p69692</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69442#p69442</link>
			<description><![CDATA[<p>Давно пользуюсь этим скриптом, отладил и оптимизировал его для медленных машин.<br /><strong>Break</strong> - последнее или выделенное слово.<br /><strong>Shift+Break</strong> - выделенное слово (надежней).<br /><strong>Ctrl</strong> - переключение раскладки.</p><p>Хоткеи можно поставить свои, незабудте поменять там где &quot;a_thishotkey&quot;.<br /></p><div class="codebox"><pre><code>
#SingleInstance,Force
AutoTrim,Off
CoordMode,Mouse,Screen
CoordMode,ToolTip
Menu,Tray,UseErrorLevel
SendMode,Input
SetBatchLines,-1
SetControlDelay,0
SetKeyDelay,0
SetTitleMatchMode,2
SetWinDelay,-1
SetWorkingDir,%A_ScriptDir%
StringCaseSense,On

Cyr = ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю
Lat = ~QWERTYUIOP{}ASDFGHJKL:&quot;ZXCVBNM!=``qwertyuiop[]asdfghjkl;&#039;zxcvbnm,.
Localed1=0x4090409  ; Английский
Localed2=0x4190419 ; Русский

+Break::
Break::
if work=0
  return
keywait,Break
if A_TimeSinceThisHotkey&gt;200
  return
Critical
TempClipboard:=ClipboardAll
Clipboard=
NewText=
SelText=
if (a_thishotkey=&quot;+break&quot;)
{
  SendInput,^{vk43}
  ClipWait,1
  SelText:=Clipboard
}
else
{
  SendInput,^{vk43}
  sleep,1
  if Clipboard!=
    if Clipboard not contains `n,`r
      SelText:=Clipboard
  if SelText=
    loop,33
    {
      Clipboard=
      SendInput,{shift down}
      tooltip
      SendInput,{Left}
      tooltip
      SendInput,{shift up}
      tooltip
      loop,5
      {
        SendInput,^{vk43}
        ClipWait,0
        if clipboard!=
          break
      }
      if Clipboard=
        break
      Len:=StrLen(Clipboard)
      if (Len = PrevLen)
      {
        SelText:=Clipboard
        break
      }
      PrevLen:=Len
      swd:=SubStr(Clipboard,1,1)
      if A_Index&gt;32
        swd=`n
      if swd in %A_Space%,%A_Tab%,`n,`r
      {
        SendInput,{shift down}
        SendInput,{right}
        SendInput,{shift up}
        swd:=SubStr(Clipboard,1,2)
        SelText:=SubStr(ClipBoard,RegExMatch(swd,&quot;[\n\r]{2}&quot;) ? 3 : 2)
        break
      }
    }
}
Loop,parse,SelText
{
  found=
  if found:=InStr(Lat, A_LoopField, 1)
    NewText.=SubStr(Cyr, found, 1)
  if !found
    if found:=InStr(Cyr, A_LoopField, 1)
      NewText.=SubStr(Lat, found, 1)
  if !found
    NewText.=A_LoopField
}
Clipboard:=NewText
Sleep,1
SendInput,^{vk56}
Sleep,300
Clipboard:=TempClipboard
TempClipboard:=SelText:=
gosub,SwitchLocale
return

; //////////Переключение языка____________________________HOTKEYS_________________________
Ctrl::
if work=0
  return
keywait,ctrl,T0.2
if errorlevel=1
  return
SwitchLocale:
WinGet,ID,id,A
ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, ID, UInt, 0)
InputLocaledID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if % InputLocaledID=Localed1
  SendMessage,0x50,0,%Localed2%,,ahk_id %ID%
else if % InputLocaledID=Localed2
  SendMessage,0x50,0,%Localed1%,,ahk_id %ID%
else
  SendMessage,0x50,0,%Localed2%,,ahk_id %ID%
MouseGetPos,x,y
InputLocaledID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
CoordMode,tooltip,Relative
if % InputLocaledID=Localed1
  ToolTip,Английский,A_CaretX+10,A_CaretY-20,3
else if % InputLocaledID=Localed2
  ToolTip,Русский,A_CaretX+10,A_CaretY-20,3
CoordMode,tooltip,Screen
SetTimer,RemoveToolTip,1000
return

RemoveToolTip:
SetTimer,RemoveToolTip,off
loop,20
  tooltip,,,,%A_index%
return

</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Wed, 13 Feb 2013 16:36:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69442#p69442</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69417#p69417</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>А если уже есть много правильно введённого текста?</p></blockquote></div><p>Присоединяюсь, это неудобно. <br />И замените CTRL+C и CTRL+V на коды, у меня скрипт 8 из 10 печатал по две буквы.<br />+ поправить траблу с символами.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 12 Feb 2013 18:51:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69417#p69417</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69416#p69416</link>
			<description><![CDATA[<p>Там может, просто не совсем понятно, мой код переводит либо выделенный текст, либо только последнее слово слева от каретки, независимо от того, напечатано что-то до него, или нет.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 12 Feb 2013 18:50:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69416#p69416</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69414#p69414</link>
			<description><![CDATA[<div class="quotebox"><cite>Drugoy пишет:</cite><blockquote><p>он переводит весь введённый текст</p></blockquote></div><p>А если уже есть много правильно введённого текста?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 12 Feb 2013 18:45:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69414#p69414</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Исправление набранного в неверной раскладке текста]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69413#p69413</link>
			<description><![CDATA[<p>Значит я всё правильно понял, просто у меня оно не работало <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 12 Feb 2013 18:44:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69413#p69413</guid>
		</item>
	</channel>
</rss>
