1 (изменено: Malcev, 2016-11-07 13:46:43)

Тема: AHK: Передать из текстового файла построчно текст в другую программу

Здравствуйте.
Мне нужно из одного документа скопировать часть текста в другой документ и потом уже из него скопировать построчно в другую программу, в которой будут произведены нужные действия.
Притом самое главное, чтобы когда все строки будут скопированы, скрипт завершал работу.
Помогите, пожалуйста, как это сделать.
Спасибо!!!

Алгоритм такой:

; вручную копирую текст из основного документа
; переход на окно Notepad
; вставка текста
Ctrl+v
; сдвиг на начало первой строки
Ctrl+Home
; опускание всего текста на одну строку вниз
Enter
; сдвиг на начало первой строки
up
; начало цикла
; сдвиг на строчку вниз
down
; на начало строки
Home
; выделение строки
Shift+End
; копирование строки
Ctrl+c
; переход на окно EDIUS
; создание нового титра
t
; вставка текста
Ctrl+v
; сохранение титра
Ctrl+s
; переход на окно Notepad

......
; конец файла?
; нет, возврат на начало цикла
; да
; выделение всего текста
Ctrl+a
; удаление всего текста
Delete
;завершение работы

2

Re: AHK: Передать из текстового файла построчно текст в другую программу

А зачем нужно создавать дополнительный файл? Построчно копировать можно непосредственно из буфера обмена или из переменной, в которую будет сохранено его содержание. Такой вариант гораздо надёжнее.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Malcev, 2011-04-29 16:42:55)

Re: AHK: Передать из текстового файла построчно текст в другую программу

Потому что в исходном файле нужно копировать только часть текста и каждый раз он находится в разных местах.
Или можно скопировать часть исходного текста и вставлять его уже из буфера обена построчно?
Просто я в скриптах совсем не очень.
Если такое возможно, то было бы вообще супер!!!
Спасибо.

4 (изменено: teadrinker, 2011-04-29 17:00:07)

Re: AHK: Передать из текстового файла построчно текст в другую программу

Malcev пишет:

Или можно скопировать часть исходного текста и вставлять его уже из буфера обена построчно?

Именно об этом я и говорю. Для этого используется команда Loop (parse a string). Как нибудь так:

SetTitleMatchMode, 2
TargetWindow =   ; указать название целевого окна, или его часть

Loop, parse, Clipboard, `n, `r
{
   WinActivate, %TargetWindow%
   SendInput, t
   Sleep, 200
   SendRaw, %A_LoopField%
   Sleep, 200
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Передать из текстового файла построчно текст в другую программу

Отредактировал немного, во втором случае лучше использовать команду SendRaw.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Передать из текстового файла построчно текст в другую программу

Или даже лучше так:

SetTitleMatchMode, 2
TargetWindov =   ; указать название целевого окна, или его часть

Loop, parse, Clipboard, `n, `r
{
   WinActivate, %TargetWindov%
   SendInput, t
   Sleep, 200
   SendInput, {Raw}%A_LoopField%
   Sleep, 200
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Передать из текстового файла построчно текст в другую программу

Спасибо большое!
Но есть 2 проблемы.
1ая - скрипт делит на строки по энтеру, а не по word-wrap.
Возможно-ли такое?
2-ая - в какой-то момент после выполнения скрипта зависает комп - невозможно открыть какой-нибудь файл, даже start-> run нельзя нажать, приходится всё закрывать и тогда может заработать.
Спасибо за помощь!

8

Re: AHK: Передать из текстового файла построчно текст в другую программу

Скрипт делит строки не по "энтеру", а по знаку переноса строки, который находится в конце каждой строки и обозначается как "`n". Если тебе нужно, чтобы строки разделялись, как это выглядит в окне Блокнота при включённой функции переноса по строкам, тогда нужно копировать всё-таки непосредственно из окна Блокнота, напишу попозже. Насчёт зависания компа — тут ничего сказать не могу, у меня ничего не зависает, если в качестве целевого окна указать простой блокнот, видимо, это какие-то особенности работы с твоей программой. Можно попробовать сделать побольше задержки Sleep в цикле, скажем, не 200, а 400, в общем, как-то поэкспериментировать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Передать из текстового файла построчно текст в другую программу

Я так понял, что ты вначале копируешь кусок текста в окно блокнота, а затем уже хочешь построчно копировать этот текст в окно целевой программы, перед каждой строчкой посылая ему t.
Запусти следующий код, активируй окно блокнота со скопированным текстом и нажми F11. Остальное должно произойти само собой!

   SetTitleMatchMode, 2
   TargetWindov =   ; указать целевое окно
   StringMaxLength = 200   ; указать максимальный размер копируемой строки в символах (можно больше)

   EM_GETLINECOUNT := 0xBA, EM_GETLINE := 0xC4

   VarSetCapacity(String, StringMaxLength)
   Return

F11::
   ControlGet, hEdit, hwnd,, Edit1, A
   SendMessage, EM_GETLINECOUNT,,,, ahk_id %hEdit%
   Loop % ErrorLevel  ; количество строк в Edit-контроле блокнота
   {
      NumPut(StringMaxLength, String)
      SendMessage, EM_GETLINE, A_Index - 1, &String,, ahk_id %hEdit%  ; копируем строку в переменную String
      Clipboard = %String%   ; помещаем строку в буфер обмена
      
      MsgBox, % Clipboard  ; только для демонстрации, эту строку можно удалить
      
      WinActivate, %TargetWindov%
      SendInput, t
      Sleep, 400
      WinActivate, %TargetWindov%
      SendInput, ^{vk56}   ; посылаем целевому окну Ctrl + V, вставляя текст из буфера обмена
      Sleep, 400
   }
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Передать из текстового файла построчно текст в другую программу

Ой, ошибочка маленькая, отредактировал!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Передать из текстового файла построчно текст в другую программу

При запуске скрипта выдаёт ошибку
http://www.zvezdolet.lv/GLEBA/1.jpg
Я извиняюсь уже за наглость, а нельзя сделать так чтобы я выделил текст в первом документе, нажал на f11,
а скрипт уже скопировал бы его во  второй документ, а из второго уже построчно в мою программу и по окончании работы стёр всё из второго документа.
И непонятно почему нельзя вставлять из буфера памяти познаково, как вы сделали во втором варианте скрипта?

StringMaxLength = 200   ; указать максимальный размер копируемой строки в символах (можно больше)

12

Re: AHK: Передать из текстового файла построчно текст в другую программу

Malcev пишет:

При запуске скрипта выдаёт ошибку

Значит, скобку "}"пропустил при копировании. В том варианте было не познаково, а построчно, тебе ведь нужно, чтобы строка заканчивалась, как в окне Блокнота? В буфере обмена текст делится на реальные строки, а не на видимые.

Malcev пишет:

Я извиняюсь уже за наглость, а нельзя сделать так чтобы я выделил текст в первом документе, нажал на f11,

Я думаю, это ты уже вполне можешь сделать сам. Чтобы поместить выделенный текст в буфер обмена, нужно послать активному окну Ctrl + C:

SendInput, ^{vk43}   ; Ctrl + C

Далее активировать нужное окно и послать Ctrl + V (уже было).

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13 (изменено: Malcev, 2011-04-30 02:25:19)

Re: AHK: Передать из текстового файла построчно текст в другую программу

Что-то я тут наверное наколбасил
И всё-равно ему не нравится что нету скобки, хотя я скопировал один-в-один

   SetTitleMatchMode, 2
   TargetWindov = Adobe Premiere Pro  ; указать целевое окно
   StringMaxLength = 200   ; указать максимальный размер копируемой строки в символах (можно больше)
 
   EM_GETLINECOUNT := 0xBA, EM_GETLINE := 0xC4
 
   VarSetCapacity(String, StringMaxLength)
   Return
 
F11::
   SendInput, ^{vk43}   ; Ctrl + C
   WinActivate, Notepad  ; активируем окно Notepad
   SendInput, ^{vk56}   ; Ctrl + V
   ControlGet, hEdit, hwnd,, Edit1, A
   SendMessage, EM_GETLINECOUNT,,,, ahk_id %hEdit%
   Loop % ErrorLevel  ; количество строк в Edit-контроле блокнота
   {
      NumPut(StringMaxLength, String)
      SendMessage, EM_GETLINE, A_Index - 1, &String,, ahk_id %hEdit%  ; копируем строку в переменную String
      Clipboard = %String%   ; помещаем строку в буфер обмена
 
      MsgBox, % Clipboard  ; только для демонстрации, эту строку можно удалить
 
      WinActivate, %TargetWindov%
      SendInput, t
      Sleep, 400
      WinActivate, %TargetWindov%
      SendInput, ^{vk56}   ; посылаем целевому окну Ctrl + V, вставляя текст из буфера обмена
      Sleep, 400
   }
   Return
   WinActivate, Notepad   ; активируем окно Notepad
   SendInput, {CTRLDOWN}a{CTRLUP}   ; выделяем всё
   SendInput, {DELETE}   ; стираем

14

Re: AHK: Передать из текстового файла построчно текст в другую программу

Не знаю, у меня всё нормально запускается, как ты написал в последнем посте.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Передать из текстового файла построчно текст в другую программу

Да, извини, запускается отлично.
Только проблема, скрипт в третий документ выводит какие-то кракозябры.
Текст который он запостил во второй документ в Notepad

Диетологи рекомендуют утром, перед завтраком, выпить стакан натурального сока – это вызовет всплеск энергии, так необходимой для трудового дня. В 3-литровой упаковке – для всей семьи, Пуре Фоод производит  полезные соки на любой вкус - сливОвый, томатный, яблочный.

А вот, что он запостил в третий (для чистоты эксперимента взял Open Office)

Диетологи рекомендуют утром, перед 瑲#завтраком, выпить стакан натурального сока – 繆ꯤ
ꯐ
это вызовет всплеск энергии, так необходимой 繆ꯤ
ꯐ
для трудового дня. В 3-литровой упаковке – для
ꯐ
всей семьи, Пуре Фоод производит  полезные для
ꯐ
соки на любой вкус - сливОвый, томатный, е для
ꯐ
яблочный.юбой вкус - сливОвый, томатный, е для
ꯐ

16

Re: AHK: Передать из текстового файла построчно текст в другую программу

Можно ещё так попробовать:

   SetTitleMatchMode, 2
   TargetWindov =   ; указать целевое окно
   StringMaxLength = 200   ; указать максимальный размер копируемой строки в символах (можно больше)
 
   EM_GETLINECOUNT := 0xBA, EM_GETLINE := 0xC4
   Return
 
F11::
   ControlGet, hEdit, hwnd,, Edit1, A
   SendMessage, EM_GETLINECOUNT,,,, ahk_id %hEdit%
   Loop % ErrorLevel  ; количество строк в Edit-контроле блокнота
   {
      String =
      VarSetCapacity(String, StringMaxLength)
      NumPut(StringMaxLength, String)
      SendMessage, EM_GETLINE, A_Index - 1, &String,, ahk_id %hEdit%  ; копируем строку в переменную String
      Clipboard = %String%   ; помещаем строку в буфер обмена
 
      MsgBox, % Clipboard  ; только для демонстрации, эту строку можно удалить
 
      WinActivate, %TargetWindov%
      SendInput, t
      Sleep, 400
      WinActivate, %TargetWindov%
      SendInput, ^{vk56}   ; посылаем целевому окну Ctrl + V, вставляя текст из буфера обмена
      Sleep, 400
   }
   Return

В строке MsgBox, % Clipboard показывает нормально или тоже с кракозябрами?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Передать из текстового файла построчно текст в другую программу

Тоже самое.
И в MsgBox, % Clipboard тоже показывает кракозябры.
А может можно расставить новые "`n" скриптом, а потом уже переносить построчно?

18

Re: AHK: Передать из текстового файла построчно текст в другую программу

Думаю, нужно определить кодировку исходного документа.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19 (изменено: Malcev, 2011-05-02 01:02:57)

Re: AHK: Передать из текстового файла построчно текст в другую программу

Так с английским текстом тоже самое - непонятно откуда эти иероглифы берутся.
А вы не пробовали его прогнать?
繆- это на китайском "сообщество"

20

Re: AHK: Передать из текстового файла построчно текст в другую программу

У меня с любым текстом всё в порядке, думаю, какая-то проблема с исходным документом. Попробуй в качестве исходного документа взять какой-нибудь текст, который сам напечатаешь в Блокноте, что получится?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: Передать из текстового файла построчно текст в другую программу

Хммм, а у меня скомпилированный скрипт на 3ёх компах с разными операционками выдаёт китайский язык, неважно - вбиваешь или нет.
А какая у вас версия AHK?

22

Re: AHK: Передать из текстового файла построчно текст в другую программу

У меня AHK_La последняя, но тут не в версии дело. Не представляю, в чём может быть проблема. Попробуй нескомпилированный скрипт.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23 (изменено: Malcev, 2011-05-02 01:45:24)

Re: AHK: Передать из текстового файла построчно текст в другую программу

Всё понял!!!
Вы рказались совершенно правы.
Сам скрипт был сохранён как ANSI
А AHK был установлен Unicode.
Осталось 3 вопроса.
1) Какой вариант скритпа лучше использовать - последний или предпоследний
2) Есть ещё один вопрос по другому скрипту тоже по тексту, его лучше здесь озаглавить или создать новую тему.
3) Возможно ли в одном файле написать сразу 2 скрипта вызывающимся по хоткиям.
Огромное Вам спасибо! )

24

Re: AHK: Передать из текстового файла построчно текст в другую программу

1 — без разницы, если работают обе.
2 — новую тему.
3 — 2 скрипта нельзя, можно 2 подпрограммы.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder