Как исправить ошибки в ahk

  • #1

Многим не нравится данная делюга, что выдаёт вопросительные знаки, при английской раскладке клавиатуры в скриптах AutoHotKey. Решение очень простое

Вставляем SendMessage, 0x50,, 0x4190419,, A в начало каждого скрипта (клавиши)

Было:

Numpad1::
{
Тело скрипта
return
}

Стало:

 Numpad1::
{
SendMessage, 0x50,, 0x4190419,, A
Тело скрипта
return
}

И при любой распладке языка у вас не будет выдавать вопросы.

  • #2

Если стоит анг то переводит на русский, спс помог.
А вот нельзя как нибудь исправить такое, вот когда например бежишь врубил этот биндер и получается, что либо с пробелами после каждой буквы, либо еще добавляются — ц, ф, ы, в… так как я бегу.

  • #3

SendInput, {F6}Text{enter}

при данном скрипте у меня не выдаёт буквы ц,ф,ы,в

  • #6

Вставляем SendMessage, 0x50,, 0x4190419,, A в начало каждого скрипта (клавиши)

и все, у кого Win7, после использования данного СендМесседжа 10-20 раз — получают другую проблему. В игре перестаёт работать стандартное переключение языков. Выходом из ситуации становится только назначение двух СендМесседжов на разные клавиши, для альтернативного изменения раскладки. И да, это лишние строки в скрипт + проблема переключения.

Проще:
1) В директории с ahk запускаем Installer.ahk -> Modify -> ANSI-32/64 -> Next -> Apply
2) Возле часов «Языковая панель» — Параметры… — Язык ввода по умолчанию -> Английский (США)
3) Пишем все скрипты в ANSI-32/64.

либо еще добавляются — ц, ф, ы, в… так как я бегу.

используй SendInput или SendPlay вместо простого Send.

  • #7

SendPlay более оптимизирован для игр и ввод гораздо быстрее нежели Input
Так же можно добавить в шапку скрипта «SendMode Play» что позволит изменить тип ввода команды send на sendplay, т.е. дальше ничего изменять не придется и всегда можно быстро выбрать тип ввода

  • #9

Спасибо БОЛЬШОЕ, помог ! ! !
Вот пример
Numpad1::
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {F6}Здравствуйте. Я сотрудник Автошколы «Имя Фамилия». {ENTER}
sleep 2500 ;
Sendinput, {F6}Какая лицензия вас интересует? {ENTER}
return

  • #10

и все, у кого Win7, после использования данного СендМесседжа 10-20 раз — получают другую проблему. В игре перестаёт работать стандартное переключение языков.

Проще:
1) В директории с ahk запускаем Installer.ahk -> Modify -> ANSI-32/64 -> Next -> Apply
2) Возле часов «Языковая панель» — Параметры… — Язык ввода по умолчанию -> Английский (США)
3) Пишем все скрипты в ANSI-32/64.

я этим способом пользуюсь, ибо как тут и написали, переключение ввода языка перестает работать после какого-то количества применения бинда.
только у меня в выборе лишь 32 битный вариант есть, хотя винда 64битная.
на другом компе, кстати, само как-то анси изначально устанавливало, ибо там не было проблемы с вопросительными знаками и я никак не мог понять почему там работает, а на основном компьютере багается. потом уже погуглил и нашел решение это. :)

  • #11

C:Program FilesAutoHotkey
Открываем файл installer > modify > ANSI 32 > NEXT > NEXT.
Жмем ПКМ по скрипту, жмем EDIT SCRIPT и копируем весь текст. Далее жмем ПКМ по рабочему столу, создать > .ahk > Edit script и вставляем текст. Жмем СОХРАНИТЬ и все.

Phoenixxx_Czar
Вроде работает, но мне интересно, что он сравнивает?Так же буквы или что-то еще?

Работает, но не со всеми именами. К примеру возникает проблема с именем «Зайра». Если ввести «Зойра», то нужно отклоняться от 0 аж на целых 0.6, что, конечно же, начинает находить многих других персонажей.

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

Array := ["Атрокс","Ари","Акали","Акшан","Алистар","Амуму","Анивия","Энни","Афелий","Эш","Аурелион Сол","Азир","Бард","Бел'вет","Блицкранк","Брэнд","Браум","Кейтлин","Камилла","Кассиопея","Чо'Гат","Корки","Дариус","Диана","Доктор Мундо","Дрейвен","Экко","Элиза","Эвелинн","Эзреаль","Фиддлстикс","Фиора","Физз","Галио","Ганкпланк","Гарен","Гнар","Грагас","Грейвз","Гвен","Гекарим","Хеймердингер","Иллаой","Ирелия","Иверн","Жанна","Джарван IV","Джакс","Джейс","Джин","Джинкс","Кай'Са","Калиста","Карма","Картус","Кассадин","Катарина","Кейл","Кайн","Кеннен","Ка'Зикс","Киндред","Клед","Ког'Мао","Ле Блан","Ли Син","Леона","Лилия","Лиссандра","Люциан","Лулу","Люкс","Мальфит","Мальзахар","Маокай","Мастер Йи","Мисс Фортуна","Мордекайзер","Моргана","Нами","Насус","Наутилус","Нико","Нидали","Ноктюрн","Нуну и Виллумп","Олаф","Орианна","Орн","Пантеон","Поппи","Пайк","Киана","Квинн","Рэйкан","Раммус","Рек'Сай","Релл","Рената Гласк","Ренектон","Ренгар","Ривен","Рамбл","Райз","Самира","Седжуани","Сенна","Серафина","Сетт","Шако","Шен","Шивана","Синджед","Сион","Сивир","Скарнер","Сона","Сорака","Свейн","Сайлас","Синдра","Таам Кенч","Талия","Талон","Тарик","Тимо","Треш","Тристана","Трандл","Триндамир","Твистед Фэйт","Твич","Удир","Ургот","Варус","Вейн","Вейгар","Вел'Коз","Векс","Вай","Виего","Виктор","Владимир","Волибир","Варвик","Вуконг","Шая","Зерат","Ксин Жао","Ясуо","Ёнэ","Йорик","Юми","Зак","Зед","Зери","Зиггс","Зилиан","Зоя","Зайра"]
 
	InputBox, string1, Введите имя персонажа,, 300, 200, 200, 200
for index, element in Array
{
string2 := element
ignoreRegister = 1
a := strDiff(string1, string2, ignoreRegister)
if a < 0.6 ;; отклонение от 0 до 1 с плавающей запятой.
{
	c := string2
MsgBox, % "a = " a " Скорее всего вы ввели " c
}


strDiff(string1, string2, ignoreRegister, maxOffset = 5)
{
	StringCaseSense, Locale

	if (ignoreRegister && string1 = string2)
	{
		return (string1 == string2 ? 0 : 0.2 / StrLen(string1))
	}
	if (string1 == "" || string2 == "")
	{
		return (string1 = string2 ? 0 : 1)
	}

	StringSplit, n, string1
	StringSplit, m, string2

	ni := 1, mi := 1, lcs := 0

	while(ni <= n0 && mi <= m0)
	{
		if (n%ni% == m%mi%)
		{
			EnvAdd, lcs, 1
		}
		else if (ignoreRegister && n%ni% = m%mi%)
		{
			EnvAdd, lcs, 0.8
		}
		else
		{
			loop, %maxOffset%
			{
				oi := ni + A_Index, pi := mi + A_Index
				if (n%oi% = m%mi% && oi <= n0)
				{
					ni := oi, lcs += (n%oi% == m%mi% ? 1 : (ignoreRegister ? 0.8 : 0))
					Break
				}
				if ((n%ni% = m%pi% && pi <= m0))
				{
					mi := pi, lcs += (n%ni% == m%pi% ? 1 : (ignoreRegister ? 0.8 : 0))
					Break
				}
			}
		}
		EnvAdd, ni, 1
		EnvAdd, mi, 1
	}
	return ((n0 + m0)/2 - lcs) / (n0 > m0 ? n0 : m0)
}
}

I can’t run codes that contain semi column key or shift and ‘ hotkey on AutoHotkey. I face these errors:

Note: The hotkey +’ will not be active because it does not exist in the current keyboard layout.

Note: The hotkey ; will not be active because it does not exist in the current keyboard layout.

I don’t know why I always face these errors I searched on internet but still don’t know how to fix the error.

  • autohotkey

asked Jan 30, 2021 at 1:24

Etemon's user avatar

EtemonEtemon

1372 silver badges10 bronze badges

5

  • This AHK forum post suggests using the vk code instead of the key name.

    Jan 30, 2021 at 1:32

  • Are you using a different language/ special keyboard layout?

    Jan 30, 2021 at 1:35

  • @Spyre Yes. I am using other language beside English. and also I changed my keyboard recently. I didn’t face this error with my old keyboard.

    Jan 30, 2021 at 1:36

  • If you run into trouble figuring out which vk code to use, this is the relevant documentation.

    Jan 30, 2021 at 1:45

  • @CharlieArmstrong it is confusing for me. for example I want to press shift and semi column the virtual key for semi column is VK_OEM_10xBA but I don’t know how to write it +{VKOEM10xBA}:: didn’t work.

    Jan 30, 2021 at 2:04

Load 7 more related questions

Show fewer related questions

Приветствую, уважаемые читатели.
Данная статья о том, как правильно настроить свой AHK для хорошей и удобной работы (без ошибок и прочего).
В моей практике часто встречались вопросы о том, как настроить правильно свои бинды, чтобы не было что-то подобного:

Либо:

И так. Пошаговая инструкция, специально для вас, по пунктам.

1. Скачиваем качественную программу с официального сайта: ahkscript.org/download/ahk-install.exe

2. Устанавливаем программу и открываем папку с установленным AutoHotKey.

3. Нажимаем » Installer «.

4. Нажимаем » Modify «.

5. Нажимаем » ANSI 32-bit «.

6. Оставляем всё как есть. Нажимаем » Next «.

7. Убираем все галочки и нажимаем » Apply «.

Готово. Пробуем. Запускаем. Радуемся.
Кому то это, возможно, пригодится.
Приятной игры.

Понравилась статья? Поделить с друзьями:
  • Как найти человека с гепатитом
  • Как найти месторасположение человека по номеру телефону
  • Как найти донора для зачатия ребенка
  • Ионные уравнения в химии как составить уравнение
  • Как найти организацию воронеже