1 (изменено: 1srafel, 2025-05-30 22:18:03)

Тема: AHK v2: InputHook()

Пытался составить код с ИИ для работы одного функционала с InputHook(). В итоге после ошибок на моей стороне, ИИ дал этот фрагмент для проверки того, что InputHook() у меня вообще работает:

#Requires AutoHotkey v2.0

MsgBox "Версия: " A_AhkVersion

ih := InputHook()
ih.On("KeyDown", (ihObj, vk, sc) => {
    MsgBox("Нажата клавиша vk: " vk)
    ih.Stop()
})
ih.Start()

Но после запуска я всегда получаю ошибку:

Error: Missing "propertyname:" in object literal.

	005: ih := InputHook()
	006: {
▶	006: Return  { MsgBox("Нажата клавиша vk: " vk) ih.Stop() }

Версия v2 последняя. В чем может быть дело?

2

Re: AHK v2: InputHook()

Пожалуй, не актуально. Grok предложил рабочий вариант без InputHook(). И вообще он лучше остальных ИИ пишет код.

3

Re: AHK v2: InputHook()

InputHook тут не при чём вообще. Стрелочные функции в AHK v2.0 не поддерживают фигурные скобки, а так же многострочные выражения. Грок наверно крутой (не пользуюсь для кода), но писать код нейросетями без понимания — не лучшая затея.

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

4 (изменено: bilolbi, 2025-12-07 14:11:50)

Re: AHK v2: InputHook()

Ошибка возникает из-за того, что ИИ смешал синтаксис JavaScript и AutoHotkey v2.

В AutoHotkey v2 стрелочная функция => ожидает одно выражение, а не блок кода в фигурных скобках {...}. Когда интерпретатор AHK видит { сразу после =>, он думает, что вы пытаетесь создать Объект (Object Literal), и поэтому требует пары "ключ: значение" (propertyname:), а находит MsgBox.

Кроме того, ИИ выдумал метод .On(). У объекта InputHook в AHK v2 нет метода On. Для назначения событий используются свойства (например, OnKeyDown).

#Requires AutoHotkey v2.0

MsgBox "Версия: " A_AhkVersion

ih := InputHook()
; Важно: включаем уведомления (N) для всех клавиш, иначе событие не сработает
ih.KeyOpt("{All}", "N")

; Назначаем функцию-обработчик по имени (без скобок вызова)
ih.OnKeyDown := MyKeyDownFunc

ih.Start()

; --- Отдельная функция для обработки нажатия ---
MyKeyDownFunc(ihObj, vk, sc) {
    MsgBox("Нажата клавиша vk: " vk)
    ihObj.Stop() ; Останавливаем хук после первого нажатия
}