TraySetIcon("fontext.dll",3)
Opt("TrayMenuMode", 1)
HotKeySet('{ESC}', "_Quit") ;по желанию выход по ESC
HotKeySet("!{ю}", "_Re") ; переключение раскладки
;_Singleton("Simple_Txt_Switcher") ; не запускать дважды
Opt("SendKeyDelay", 1)
Opt("SendKeyDownDelay", 1)
#include <Misc.au3>
#include <Array.au3>
$aEn = StringSplit("`qwertyuiop[]asdfghjkl;'zxcvbnm,./&", "")
$aRu = StringSplit("ёйцукенгшщзхъфывапролджэячсмитьбю.?", "")
While 1
Sleep(10)
WEnd
Func _Re()
$sOld_bufer = ClipGet() ; для восстановления буфера
;проверка выделенного текста, если не выделен, то выделяем
_SendEx("^{INS}")
Sleep(10)
$sSelected_Text = ClipGet()
Sleep(10)
If $sSelected_Text=$sOld_bufer Then
;_SendEx("+{HOME}") ; выделяем строку
_SendEx("^+{LEFT}") ; выделяем слово
_SendEx("^{INS}") ; копируем текст
$sSelected_Text = ClipGet()
Sleep(10)
EndIf
$New_Text=''
$aSplitTextArr = StringSplit($sSelected_Text, "")
; ищем справа-налево последний валидный символ в тексте, по которому можно определить язык
$bykva=''
For $i = StringLen($sSelected_Text) to 1 Step -1
If StringInStr('ёйцукенгшщзхъфывапролджэячсмитьбюqwertyuiopasdfghjklzxcvbnm', StringMid($sSelected_Text, $i, 1))<>0 Then
$bykva=StringMid($sSelected_Text, $i, 1)
ExitLoop
EndIf
Next
;определяем язык
If $bykva='' Then Exit ; здесь нужно проверить текущую раскладку на случай если язык не определён
; если последний валидный символ принадлежит русскому языку, то меняем на англ.
If StringInStr("ёйцукенгшщзхъфывапролджэячсмитьбю", $bykva)<>0 Then
For $i = 1 to $aSplitTextArr[0]
$n = _ArraySearch($aRu, $aSplitTextArr[$i], 1)
If @error<>0 Then
$New_Text&=$aSplitTextArr[$i]
Else
$New_Text&=$aEn[$n]
EndIf
Next
EndIf
; если последний валидный символ принадлежит английскому языку, то меняем на русс.
If StringInStr("qwertyuiopasdfghjklzxcvbnm", $bykva)<>0 Then
For $i = 1 to $aSplitTextArr[0]
$n = _ArraySearch($aEn, $aSplitTextArr[$i], 1)
If @error<>0 Then
$New_Text&=$aSplitTextArr[$i]
Else
$New_Text&=$aRu[$n]
EndIf
Next
EndIf
ClipPut($New_Text) ; отправляем в буфер
Sleep(10)
Send("+{INS}") ; вставляем из буфера
EndFunc
Func _SendEx($sSend_Data)
Local $hUser32DllOpen = DllOpen("User32.dll")
While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
Sleep(10)
WEnd
Send($sSend_Data)
DllClose($hUser32DllOpen)
EndFunc
Func _Quit()
Exit
EndFunc