Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27,
Цитата:
выделяем с CTRL пока размер выделенного фрагмента не превысит исходный (из буфера), потом возвращаемся обратно но уже без CTRL
Вот если бы можно было быстрее это делать... при длинном выделении очень медленно получается.

Мне удалось в моей функции преодалеть проблемы когда выделялся весь текст если исходное выделение было посредине слова.. плюс я вспомнил, ведь есть ещё Opt("SendKeyDelay", 0) и Opt("SendKeyDownDelay", 0) - увеличивает скорость в несколько раз (на коротком выделении почти мгновенно)...

Вот финальная версия (с использованием обычного массива, без Dictionary, мне если честно немного не привычно ориентироваться в нём):

Код: Выделить весь код
#NoTrayIcon
Opt("SendKeyDelay", 0)
Opt("SendKeyDownDelay", 0)
HotKeySet("`", "ConvertProc")
HotKeySet("^q", "Quit")

While 1
    Sleep(100)
WEnd

Func ConvertProc()
    Local $OldClip = ClipGet()
    ClipPut("")
    Send("^{Insert}")
    Local $SelectedText = ClipGet()
    If $SelectedText = "" Then
        HotKeySet("`")
        Send("`")
        HotKeySet("`", "ConvertProc")
        Return
    EndIf

    Local $NewClip = ConvertText($SelectedText)

    ClipPut($NewClip)
    Send("+{Insert}")
    RestoreSelection($NewClip)
    ClipPut($OldClip)
EndFunc

;If $Mode = 0 Then Russian language used
;If $Mode = 1 Then English language used
;If $Mode = -1 Then String Inverted
Func ConvertText($Text, $Mode=-1)
    Local $StringIsUpper = 0, $TextRet = ""
    Local $SplitTextArr = StringSplit($Text, "")
    Local $LettersArr = GetLettersArr()

    For $i = 1 To $SplitTextArr[0]
        Local $i_0 = 1, $i_1 = 0
        $StringIsUpper = 0
        If StringIsUpper($SplitTextArr[$i]) Then $StringIsUpper = 1

        If $Mode = 0 Or ($Mode = -1 And StringIsASCII($Text)) Then Local $i_0 = 0, $i_1 = 1

        For $j = 1 To $LettersArr[0][0]
            If $SplitTextArr[$i] = $LettersArr[$j][$i_0] Then
                $SplitTextArr[$i] = $LettersArr[$j][$i_1]
                ExitLoop
            EndIf
        Next

        If $StringIsUpper = 1 Then $SplitTextArr[$i] = StringUpper($SplitTextArr[$i])
        $TextRet &= $SplitTextArr[$i]
    Next
    Return $TextRet
EndFunc

Func GetLettersArr()
    Local $AnsiStr = "ёйцукенгшщзхъфывапролджэячсмитьбю.?"
    Local $AsciiStr = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./&"
    Local $StrLenght = StringLen($AnsiStr)

    Local $LettersArr[$StrLenght+1][2]
    $LettersArr[0][0] = $StrLenght

    For $i = 1 To $StrLenght
        $LettersArr[$i][0] = StringMid($AsciiStr, $i, 1)
        $LettersArr[$i][1] = StringMid($AnsiStr, $i, 1)
    Next

    Return $LettersArr
EndFunc

Func RestoreSelection($rText)
    Local $LeftJumps = GetLeftJumps($rText)
    Send("^+{LEFT " & $LeftJumps & "}")
    Send("^{Insert}")
    Local $NewSelText = ClipGet()
    If StringLen($NewSelText) > StringLen($rText) Then Send("+{RIGHT " & StringLen($NewSelText) - StringLen($rText) & "}")
EndFunc

Func GetLeftJumps($Text)
    StringRegExpReplace($Text, '\n', '')
    Local $Extended = @extended

    $Text = StringStripWS($Text, 3)
    $Text = StringRegExpReplace($Text, '\s+|\t+', ' ')
    $Text = StringRegExpReplace($Text, '~|`|!|#|%|\^|&|\*|\(|\)|-|\+|=|\{|\}|''|"|;|:|/|\\|<|>|\?|,|\[|\]|ч|Ч|ё|Ё', '|')
    $Text = StringRegExpReplace($Text, '\|+', '|')

    Local $WordsCountArr = StringRegExp($Text, "[\s\.:;,]*([а-яА-Яa-zA-Z0-9-_]+)[\s\.:;,]*", 3)
    StringRegExpReplace($Text, '\|', '')
    $Extended += @extended + UBound($WordsCountArr)
    Return $Extended
EndFunc

Func Quit()
    Exit
EndFunc

Цитата:
там же добавил линк на параметры реестра
Спасибо, полезный линк - правда нужной инфы я там не нашёл, а я прочитал каждую строчку на той страничке

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:23, 08-10-2007 | #565