Send/ControlSend (нажатие клавиш) не работает в программе/игре
Как минимум один из этих способов сможет решить эту проблему:
1) SetKeyDelay
Некоторые игры не улавливают быстрые нажатия, которое по-умолчанию использует AHK.
В этом случае помогает увеличение длительности нажатий и промежутков между нажатиями клавиш:
SetKeyDelay 50, 100 ; увеличение длительности зажатия до 50 мс, увеличение промежутка между нажатиями до 100 мс
Send {Left}{Right}
/* Код выше аналогичен следующему:
Send {Left Down}
Sleep 50
Send {Left Up}
Sleep 100
Send {Right Down}
Sleep 50
Send {Right Up}
*/
2) Запуск скрипта от администратора
* Только для тех случаев, когда программа с которой надо взаимодействовать сама запущена от админа, иначе это не поможет!!!
Сделать это можно любым из следующих способов:
• Правой кнопкой мыши по скрипту → выбрать пункт в меню
• Код ниже, вставленный вначале скрипта, перезапустит его от админа:
if not A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%" ; Requires v1.0.92.01+
ExitApp
}
Для всех скриптов:
• Заходим с C:\Program Files\Autohotkey, заходим в свойства файла autohotkey.exe → Совместимость → Запускать от имени администратора.
• Полностью отключить UAC (см. пункт 3)
3) SendMode Play
Специальный режим работы Send, если обычный не работает.
Для включения нужно вставить строку SendMode Play вначале скрипта и сделать одно из двух: (на ХР работает без доп.действий)
• UI Access
При установке AutoHotkey отметить пункт про добавление в контекстное меню запуска с UI Access.
После установки запускать скрипт правой кнопкой мыши → UI Access.
https://autohotkey.com/docs/FAQ.htm#uac
• Отключить UAC в ОС (не рекомендуется из соображений безопасности в ОС)
Для Win 7 — пуск → панель управления → система и безопасность.
1. Заходим в пуск и вводим: regedit (открываем его)
2. Там есть путь к папкам, в эту строку вводим: C:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
3. Далее в правом столбике файлов ищем: "EnableLUA" нажимаем на него и меняем значение на 0. (То-есть: с 1 меняем до 0.)
4. Перезагружаем компьютер и запускаем АХК.
Побочный эффект — не будут работать плитки, все программы будут работать от имени админа.
4) Низкоуровневая эмуляция клавиатуры и мыши с помощью драйвера
Античит игры может ловить нажатия на уровне железа и отличать искусственные нажатия от настоящих.
В этом случае поможет имитация ввода с помощью одной из специальных библиотек:
AutoHotInterception / Interception - свободная библиотека с большими возможностями.
WinRing0 - только для PS/2 интерфейса, не поддерживает USB клавы.
Class_DD - бесплатная версия требует доступ в инет в момент запуска и имеет ограничение на кол-во одновременно запущенных экземпляров.
MouseMove не работает в игре:
LLMouse - библиотека для низкоуровнего перемещения курсора = обертка над вызовом DllCall("mouse_event", ...).
Ограничения: умеет перемещает курсор только относительно текущего положения (на х вправо, на у вниз), нельзя указать конкретную координату для перемещения (1280, 500).
Также мышь можно эмулировать с помощью библиотек из пункта 4.