1 (изменено: SeaVodikendu, 2017-02-15 02:44:07)

Тема: AHK: Использование Функции с Clipboard

Здравствуйте.
Продолжая тему с заменой строк...
Нужен скрипт, который при нажатии хоткея, считывал буфер обмена, потом находил совпадения в функции и выводил результат.
Простым языком:
Я пишу английское слово кириллицей или латиницей ("дом" или "dom", "один" или "odin"), сохраняю его в буфер, далее после нажатия хоткея, скрипт сверяет слово в буфере и в функции, и заменяет слово на "home" или "one" (к примеру).

Как-то так:


Var := Expression("дом", "dom" = "home" ; "один", "odin" = "one") ; etc (Таких выражений\значений будет тысяча)

1::
if clipboard = %Var% ; Если в буфере "дом" или "dom", "один" или "odin".
{
Sendinput, %Expression% ; Заменяет на "home" или "one".
}
return

2 (изменено: svoboden, 2017-02-15 05:54:19)

Re: AHK: Использование Функции с Clipboard

Как-то так:

1::
If clipboard in дом,dom
SendInput home
return

2::
 If clipboard in один,odin   
SendInput one
return

3

Re: AHK: Использование Функции с Clipboard

svoboden
Можно ли это исполнить в один хоткей и обойтись переменными?  Нужно будет тысячу слов запихнуть.

4 (изменено: svoboden, 2017-06-17 11:54:07)

Re: AHK: Использование Функции с Clipboard

А зачем? Все равно надо будет писать тысячу слов, какая разница, где их писать, их все равно будет много. А так, так еще можно:

1::
If clipboard in дом,dom,один,odin
SendInput, % clipboard = "dom" ? "home" : clipboard = "odin" ? "one" : clipboard = "один"
 ? "one" : clipboard = "дом" ? "home" : "хата"
return

5

Re: AHK: Использование Функции с Clipboard

С массивами проще будет.
Интересный момент обнаружил:

#If ClipBoard = "blah-blah"
f1::
MsgBox
return
#If

При нажатии f1, если ClipBoard != "blah-blah" перестает работать буфер обмена.
Баг?

6

Re: AHK: Использование Функции с Clipboard

svoboden
Вообщем не запихнуть сюда и 100 слов - "Слишком длинное выражение".

Malcev пишет:

С массивами проще будет.

Я так и думал.
Подскажите как это сделать?

Оверквотинг запрещён. Удалено.

7 (изменено: Malcev, 2017-02-15 08:38:49)

Re: AHK: Использование Функции с Clipboard

Так можно:

items := {дом:"home", dom:"home", odin:"one", один:"one"}

#If items.HasKey(ClipBoardData)
f1::
MsgBox % items[ClipBoard]
return
#If

OnClipboardChange:
ClipBoardData := ClipBoard
return

8

Re: AHK: Использование Функции с Clipboard

Malcev
Я забыл и мне никто не сказал ,что в принципе невозможно делать Expressions из более 512 символов.
Возникает вопрос, как поделить?
Либо в самом скрипте разбить на items2, items3 и тд, если это возможно.
Либо запихнуть выражения в файл и от туда Loop, read`ить по строке.

9

Re: AHK: Использование Функции с Clipboard

Я не понимаю про какие вы ограничения говорите и что хотите добиться.

10

Re: AHK: Использование Функции с Clipboard

Malcev
Мне нужно в это выражение...

{дом:"home", dom:"home", odin:"one", один:"one"}

вставить более тысячи слов.
Но не удается, появляется ошибка "Too long expression".

11

Re: AHK: Использование Функции с Clipboard

Можно так:

list = дом:home,dom:home,odin:one,один:one
items := {}
loop, parse, list, `,
{
   StringSplit, Array, A_LoopField, :
   items[Array1] := Array2
}

#If items.HasKey(ClipBoardData)
f1::
MsgBox % items[ClipBoard]
return
#If

OnClipboardChange:
ClipBoardData := ClipBoard
return

12

Re: AHK: Использование Функции с Clipboard

Malcev, при первом запуске буфер не работал, но повторить почему-то не удается.

13

Re: AHK: Использование Функции с Clipboard

Malcev
Отлично работает. Спасибо.

14 (изменено: svoboden, 2017-02-16 08:47:49)

Re: AHK: Использование Функции с Clipboard

Можно без массивов:

1::
If clipboard in дом,dom
  var = home
Else If clipboard in odin,один
  var = one
Msgbox, %var%
return