Ahk сообщение в чат

Обновлено: 05.05.2024

Начнём с определения, что же такое программа AutoHoyKey.
AutoHotKey - это программа для создание "горячих клавиш", то есть с помощью неё(программы) вы можете установить часто используемые команды или фразы в sa:mp, и быстро их использовать.

Как изготовить свой скрипт? Тут все просто, надо только руководствоваться этим FAQ.
1) Для начала скачиваем и устанавливаем саму программу autohotkey.

2) Теперь открываем блокнот(по умолчанию: пуск > стандартные > блокнот) и начинаем писать свой скрипт по команде на одну строчку.

F1::SendPlay, Привет всем.

!1::SendPlay, Привет всем.

В примере приведённом выше при нажатии альта и цифры один над буквами у вас напечатается в чат "Привет всем".
Также есть команды в которых необходимо дописать что-либо, за примером далеко ходить не буду команда /frisk id (обыск у законников):

В этом примере я написал на конце - то есть нажав F1 вам остаётся вписать только ид игрока для того чтобы его обыскать.
Для того чтобы пользоваться кнопками на нумпаде необходимо писать вот так:

Numpad1::SendPlay, Привет всем.
Ну вот вроде и все, осталось сохранить скрипт.

3) Сохраняем скрипт:
Фаил > Сохранить как > В типе файлов выбираем "Все файлы" - обязательно!
Название пишем вот так пример Skript.ahk - тут главное окончание .ahk
Далее есть возможность изменить формат скрипта из .ahk в .exe - для того чтобы запускать скрипт без самой программы. Вот инструкция:
Открываем: Пуск > Все программы > AutoHotKey > Convert .ahk to .exe
Остался всего лишь пустяк: в первой строчке указываем путь к файлу .ahk, а во второй туда куда хотите сохранить "самостоятельный скрипт". Жмём Convert и готово!

4) Запуск бинда:
Щёлкаем по иконке бинда, если у часов в правом углу появился зелёный значок с белой буквой Н то все работает и готово к использованию.

Выкладываю часть бинда составленного для полиции:

F1::Sendplay, /enter
F2::Sendplay, /exit
1::Sendplay, /m Пожалуйста прижмитесь к обочине и остановите машину
2::Sendplay, /m Немедленно остановите машину или мы открываем огонь
Numpad1::Sendplay, /m Пожалуйста выйдите из машины
Numpad2::Sendplay, /me показал значек офицера полиции
!1::Sendplay, Здравствуйте
!2::Sendplay, Сохраняйте спокойствие, выйдите из машины
^1::Sendplay, Будьте так добры, предъявите свои лицензии((/showlicenses id))
+1::Sendplay, Мне придётся вас обыскать. Поднимите руки вверх((/handsup))


Всем привет, сегодня разберём некоторые функции для чата.

Функция используется так:

Пример полного кода:

Как вы можете видеть, я использовал фигурные скобки, это не обязательно, но правильно. Чтобы не писать много строк, если у вас большой текст, есть методы оптимизации, но к этому не скоро.

Например функция SendInput , сама функция удобная, но только не для отправления в чат, а для нажатия какой-то клавиши, функция Send тоже может для этого использоваться. То есть если вам просто нужно нажать нужную кнопку, например выбрать нужную вкладку в диалоге вы можете это использовать так:

Кстати о коде клавиш, скину в конце темы ссылку на программу для определения кода клавиши. Вы просто нажимаете нужную вам клавишу и копируете " vk "

Но в данном случае скрипт активируется только тогда, когда команда была вручную введена в чат, а также к активации может привести нажатие пробела. Меня интересует, как сделать активацию командой таким образом, что бы скрипт активировался только по нажатию Enter и его можно было ввести как вручную так и автоматически. Подскажите пожалуйста.

2 Ответ от svoboden 2017-07-18 15:48:12

  • svoboden
  • Разработчик
  • Неактивен











3 Ответ от cathippo2012 2017-07-18 16:18:25 (изменено: cathippo2012, 2017-07-18 18:38:43)

  • cathippo2012
  • Участник
  • Неактивен

svoboden
Не работает.

4 Ответ от svoboden 2017-07-18 16:52:25

  • svoboden
  • Разработчик
  • Неактивен











Даже в блокноте не работает?

5 Ответ от cathippo2012 2017-07-18 17:09:08 (изменено: cathippo2012, 2017-07-18 18:38:37)

  • cathippo2012
  • Участник
  • Неактивен

svoboden Да, проверил твою команду в новом текстовом документе, при вводе /privet ничего не происходит, но если открыть чат (F6) и нажать на Up то там будет написано " SendInput ".

6 Ответ от svoboden 2017-07-18 17:17:19 (изменено: svoboden, 2017-07-18 17:17:41)

  • svoboden
  • Разработчик
  • Неактивен











но если открыть чат (F6) и нажать на Up

На какой еще "UP", автозамена активируется на нажатие клавиши "Enter".

7 Ответ от cathippo2012 2017-07-18 17:23:31 (изменено: cathippo2012, 2017-07-18 18:38:29)

  • cathippo2012
  • Участник
  • Неактивен

svoboden
После ввода команды в чате будет фраза SendInput (Up - стрелочка вверх).

8 Ответ от svoboden 2017-07-18 17:58:08 (изменено: svoboden, 2017-07-18 18:01:10)

  • svoboden
  • Разработчик
  • Неактивен











Так, значит, все работает, или тебе надо запустить автозамену без активации на Enter?
Вот пример:

И откудово взялся Up, я так и не понял.

9 Ответ от cathippo2012 2017-07-18 18:02:03 (изменено: cathippo2012, 2017-07-18 18:38:20)

  • cathippo2012
  • Участник
  • Неактивен

svoboden
Забудь про UP, не работает.

10 Ответ от cathippo2012 2017-07-18 18:03:33

  • cathippo2012
  • Участник
  • Неактивен

Мне нужно чтобы скрипт активировался командой, и чтоб при этом ее можно было вставить тем же самым SendInput,а также чтобы активация команды происходила не на Space и Enter, а только на Entersvoboden

11 Ответ от svoboden 2017-07-18 18:03:44 (изменено: svoboden, 2017-07-18 18:10:43)

  • svoboden
  • Разработчик
  • Неактивен











Так я же писал
уже, как такое можно сделать. И в блокноте работает же.

12 Ответ от cathippo2012 2017-07-18 18:08:11 (изменено: cathippo2012, 2017-07-18 18:38:05)

  • cathippo2012
  • Участник
  • Неактивен

svoboden
Проверил снова сейсас, вроде работает, но не так как хотелось бы, скрипт активируется сразу после того как я ввел последний символ, то есть "t", а мне нужно чтобы я мог свободно написать эту команду в чат и скрипт активировался только тогда, когда я отправлю ее в чат (Enter).

13 Ответ от svoboden 2017-07-18 18:12:19 (изменено: svoboden, 2017-07-18 18:17:07)

  • svoboden
  • Разработчик
  • Неактивен











Там нет такого символа `t. Символ `n - это клавиша "Enter" в автозамене.

14 Ответ от cathippo2012 2017-07-18 18:14:48 (изменено: cathippo2012, 2017-07-18 18:37:55)

  • cathippo2012
  • Участник
  • Неактивен

svoboden
Последний символ в коменде /privet - t. Скрипт активируется сразу после того как я ввожу его, а Enter нажимается автоматически. Мне нужно чтобы я сам нажимал Enter.

15 Ответ от cathippo2012 2017-07-18 18:18:24

  • cathippo2012
  • Участник
  • Неактивен

svoboden
Если ты понимаешь как работают обычные команды на любом сервере в сампе, то мне нужно сделать также.

16 Ответ от ypppu 2017-07-18 18:24:00











17 Ответ от svoboden 2017-07-18 18:25:21

  • svoboden
  • Разработчик
  • Неактивен











Не понимаю ничего, может, тебе другие пользователи помогут.

18 Ответ от belyankin12 2017-07-18 22:56:47

  • belyankin12
  • Модератор
  • Неактивен











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






Developer := "http://xfamily.zzz.com.ua/family.txt"
XChat = %A_Temp%\xchat.txt
Family = Top Chat

Loop
URLDownloadToFile, %Developer%, %XChat%
FileRead, LastString, %XChat%
if (LastString != OldLastString)
AddChatMessageEx("ffffff", "" LastString)
>
OldLastString := LastString
>

~Enter::
~NumpadEnter::
if (isInChat())
Sleep 200
AntiCrash()
dwAddress := dwSAMP + 0x12D8F8
ChatInput := readString(hGTA, dwAddress, 256)
if ChatInput contains /x
RegExMatch(ChatInput, "\/x\s(.*)", AddChat)
if (AddChat1 != "")
phpserver := "http://xfamily.zzz.com.ua/awfjiafjiowjioafw.php"
global direct = A_Temp
global direct2 = A_ScriptDir
Name := getUsername()
PID := getId()
ServerFull := getServerName()
color := getPlayerColor(PID)
Colorstr := ColorToStr(color)
RegExMatch(ServerFull, "[A-Za-z ]\s\|\s(.*)", Server)
if (colorstr = "")
colorstr := ""
>
Final := "[" family "] [" Server1 "] " colorstr "" Name ": " AddChat1
URLDownloadToFile, %phpserver%?Text=%Final%, %a_temp%/r_status.php
AddChat1 := ""
>
>
Free:
ProcessWriteMemory("" ,dwSAMP + 0x12D8F8, "gta_sa.exe", "Str", 126)
>
return

Сохраняем скрипт
5. Тестим скрипт на работоспособность
Скидываем AHK другу и просим запустить и запускаем его сами. Прописываем /x и, если вы все настроили правильно - у вас все заработает.
По всем вопросам писать мне ВКонтакте

PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText] SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

Параметры

ErrorLevel

PostMessage: нуль, если программа выполнена успешно; иначе 1.

Примечания

Параметры Msg, wParam и lParam должны быть целыми числами между -2147483648 и 4294967295 (0xFFFFFFFF). Как обычно в AutoHotkey, префикс 0x означает шестнадцатеричное число. Например, 0xFF эквивалентно 255.

Послать строку через параметры wParam или lParam можно путём указания адреса переменной. Пример ниже использует оператор адреса (&), чтобы сделать это:

Начиная с версии 1.0.40.05 строка в кавычках (литеральная строка) также может быть послана; оператор & в этом случае не используется. Например:

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

Читайте также: