1

Тема: AHK: Как реагировать на нужные слова - внутри файла txt

Здравствуйте.
Помогите решить задачу.

У меня есть простой классический код ahk.
Он реагирует на последовательность нажатий клавиш на клавиатуре.
Если вводится конкретное слово, то скрипт немедленно выполняет какую-то команду.

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


:*:Первая команда!:: 
:*:Команда первая!::
Sleep, 500
   Run F:\каталог файлов\3 5v.au3
   Return
:*:Запустить программу2!::
Sleep, 500
   Run F:\каталог файлов\741.au3
   Return

2 (изменено: teadrinker, 2020-07-25 14:20:15)

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Можно использовать такой принцип:

fileContent =
(
:*X:Первая команда!|Action1
:*X:Команда первая!|Action1
:*X:Запустить программу2!|Action2
)
while RegExMatch(fileContent, "`amO)^(.+)\|(.+)$", m, m ? m.Pos + m.Len : 1)
   Hotstring(m[1], m[2])
Return

Action1() {
   MsgBox, % A_ThisFunc
}

Action2() {
   MsgBox, % A_ThisFunc
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: Как реагировать на нужные слова - внутри файла txt

teadrinker
Здесь не написать много команд и не разбить их на категории.
Как взять эти команды из txt файла ?

4

Re: AHK: Как реагировать на нужные слова - внутри файла txt

То, что fileContent — пишите в файле. В скрипте используйте FileRead, fileContent, MyFile.txt.

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

5

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Я в самом первом сообщении именно об этом и спрашивал.

У меня есть простой классический код ahk.
Он реагирует на последовательность нажатий клавиш на клавиатуре.
Если вводится конкретное слово, то скрипт немедленно выполняет какую-то команду.

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

6

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Пишите ту часть, что в моём скрипте в начале, в файл:

:*X:Первая команда!|Action1
:*X:Команда первая!|Action1
:*X:Запустить программу2!|Action2

В скрипте читайте содержимое файла в переменную fileContent.

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

7

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Сам скрипт должен так выглядеть:

FileRead, fileContent, MyFile.txt
while RegExMatch(fileContent, "`amO)^(.+)\|(.+)$", m, m ? m.Pos + m.Len : 1)
   Hotstring(m[1], m[2])
Return

Action1() {
   MsgBox, % A_ThisFunc
}

Action2() {
   MsgBox, % A_ThisFunc
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

8

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Ясно, спасибо.

Но это - только ключевые слова.
Команды Action1 и Action1 -  по-прежнему находятся внутри скрипта, а не в том же самом txt
Я имею ввиду саму команду ( MsgBox, % A_ThisFunc ), а не ссылку на нее - Action1.

9

Re: AHK: Как реагировать на нужные слова - внутри файла txt

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

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

10

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Понятно

11

Re: AHK: Как реагировать на нужные слова - внутри файла txt

А может быть можно как-нибудь, перенести в txt не команду, а только путь к исполняемому файлу (который нужно запустить) ?

Чтобы вот такой вид текста был в txt:
:*X:Первая команда!|F:\каталог файлов\3 5v.au3
:*X:Команда первая!|F:\каталог файлов\3 5v.au3
:*X:Запустить программу2!|F:\каталог файлов\741.au3

В коде по-прежнему будет присутствовать команда Run
А адрес приставленный в коде - к Run - чтобы брался из txt

12

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Можно, тогда так:

FileRead, fileContent, MyFile.txt
while RegExMatch(fileContent, "`amO)^(.+)\|(.+)$", m, m ? m.Pos + m.Len : 1)
   Hotstring(m[1], Func("RunFile").Bind(m[2]))
Return

RunFile(filePath) {
   Run, % filePath
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

13

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Спасибо.
Все работает.

14

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Подскажите, а нельзя ли как-нибудь распознавать данные в txt вот в таком виде (с разделителем в виде строки):

:*X:Первая команда!
:*X:Команда первая!
F:\каталог файлов\3 5v.au3

:*X:Запустить программу2!
F:\каталог файлов\741.au3

(Чтобы не писать - рядом с однотипными командами - один и тот же адрес.)

15 (изменено: teadrinker, 2020-07-26 20:28:48)

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Попробуйте так:

FileRead, fileContent, MyFile.txt
while RegExMatch(fileContent, "`amiO)((?:^:.+$\R?)+)\R(^[a-z]:\\.+$)", m, m ? m.Pos + m.Len : 1) {
   Loop, parse, % m[1], `n, `r
      Hotstring(A_LoopField, Func("RunFile").Bind(m[2]))
}
Return

RunFile(filePath) {
   Run, % filePath
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

16

Re: AHK: Как реагировать на нужные слова - внутри файла txt

Спасибо большое.
Все заработало.