1 (изменено: SeaVodikendu, 2017-05-19 15:47:17)

Тема: AHK: Несколько мест для сохранения текста из Clipboard

Доброго времени суток.
Написал скрипт, с помощью которого можно сохранять несколько текстов из clipboard в переменные, для их дальнейшего использования.

#SingleInstance force


Numpad1::
if clpb =
{
Send ^c
cb1 := clipboard
clpb := 1
Goto, endx
}

if clpb = 1
{
Send ^c
cb2 := clipboard
clpb := 2
Goto, endx
}

if clpb = 2
{
Send ^c
cb3 := clipboard
clpb := 3
Goto, endx
}
endx:
return

Numpad2::
if incb =
{
Sendinput, %cb1%
incb = 1
Goto, endt
}

if incb = 1
{
Sendinput, %cb2%
if cb3 =
{
incb =
}
else
{
incb = 2
}
Goto, endt
}

if incb = 2
{
Sendinput, %cb3%
incb =
Goto, endt
}
endt:
return

Numpad3::
Reload
Return

Получилось много текста и это всего лишь на три переменные (места).
Можно ли как нибудь упростить это дело, чтоб не прописывать много?
К примеру увеличить до 10 мест для сохранений.

2 (изменено: stealzy, 2017-05-19 16:08:49)

Re: AHK: Несколько мест для сохранения текста из Clipboard

Это называется менеджер буфера обмена (Clipboard manager). Существуют сотни программ и даже несколько скриптов на ahk.
По вопросу - познакомьтесь с функциями и массивами.

3 (изменено: SeaVodikendu, 2017-05-25 09:58:08)

Re: AHK: Несколько мест для сохранения текста из Clipboard

Сделал простенький скрипт, то что и хотел. Чтобы не ломать голову переменными, просто нужный текст сохраняется в файл.

#SingleInstance force

Numpad1::
Send ^c
FileAppend, %clipboard% `n, %a_temp%\ClipBoardM.txt
Return

Numpad2::
Loop
{

 FileReadLine, cpline, %a_temp%\ClipBoardM.txt, %A_Index%
   if  cpline =
   {
   MsgBox , , ,Текст не выбран, 1
   goto, endx
   }
     if ErrorLevel
	 {
	    Sendinput, {Numpad2}
        goto, endx
	 } 
Send, %cpline%{BS}
KeyWait, Numpad2, D
}
endx:
Return

Numpad3::
FileDelete, %a_temp%\ClipBoardM.txt
MsgBox , , ,Очищено, 1
Reload
Return

Вот только не пойму почему в этой строке:

Send, %cpline%{BS}

если заменить Send на Sendinput, команда не учитывает %A_Index%, а прописывает все строки из файла?

4

Re: AHK: Несколько мест для сохранения текста из Clipboard

SendInput тут явно не при чем:

cpline := "test"
f1::
Send, %cpline%{BS}
return
f2::
SendInput, %cpline%{BS}

5 (изменено: SeaVodikendu, 2017-05-25 13:03:24)

Re: AHK: Несколько мест для сохранения текста из Clipboard

Malcev
Не совсем понял вас.

Из файла берутся строки по очереди:

FileReadLine, cpline, %a_temp%\ClipBoardM.txt, %A_Index%

Все работает хорошо, только вот Send не устраивает в отличии от SendInput из-за не мгновенного ввода.
Но если заменить на SendInput, он не вводит строки по очереди, а все строки в файле сразу...

Попробовал заменить на SendPlay, он вводит строки по очереди, но текст выходит с другой кодировкой(кракозябры).

6

Re: AHK: Несколько мест для сохранения текста из Clipboard

Непонятна логика вашего кода. Sleep 500 после SendInput поставьте, если слишком быстро.

7 (изменено: SeaVodikendu, 2017-05-25 18:44:54)

Re: AHK: Несколько мест для сохранения текста из Clipboard

stealzy

Numpad1  копирует выделенный текст в буфер и сохраняет в файл.
Numpad2 запускает цикл вывода каждой строки по очереди, причем до появления следующей строки, ожидается нажатие этого же хоткея (Sleep тут не нужен).

Sleep 500 после SendInput поставьте, если слишком быстро.

Не в этом проблема.
Когда переменная "cpline", которая содержит в себе каждую новую строку из FileReadLine с A_Index, используется командой Send - то работает как надо, т.е. при поочередном нажатии Numpad2, выводится каждая следующая строка из файла.
А если использовать не Send, а SendInput (чтобы строка вводилась мгновенно, а не прописывались каждые символы), в таком случае переменная "cpline" будет содержать в себе все строки из файла сразу, ну и выводить их все сразу.

Возможно со слов сложно представить, что я имею ввиду, но на практике все станет понятно.