Проблема в том, что невозможно одновременно имитировать нажатие/отпускание ЛКМ и отслеживать его состояние.
Обходной путь ниже:
Шаг 0.
Вы собираетесь изменить поведение левой кнопки мыши.
Это потенциально опасная операция: вы почти ничего не сможете сделать на своем компьютере без ЛКМ.
Поэтому вы должны создать "запасной ЛКМ".
Например, если вы не используете кнопку мыши 8, вы можете заставить ее работать как клон на ЛКМ.
Перейдите в GHUB (устройство мыши, экран «Назначения», вкладка «СИСТЕМА»).
Назначьте «Основной клик» вашему физическому МБ № 8.
Теперь, если что-то пойдет не так и ваша ЛКМ перестанет работать, вы можете нажать MB#8 вместо ЛКМ.
Шаг 1.
Вы используете кнопку мыши 4 ("назад") в игре?
- Если ДА (некоторое действие в игре установлено на MB#4), перейдите к "Шаг 2".
- Если НЕТ (игра игнорирует нажатие MB#4), пропустите «Шаг 2» и перейдите к «Шаг 3».
Шаг 2.
Вам нужно переназначить игровое действие с MB#4 на какую-то другую клавишу.
Сделайте следующее:
- выберите клавишу клавиатуры, которую вы сейчас не используете в игре
(предположим, что ключ F12
в настоящее время не используется)
- перейдите в GHUB (мышь, экран "Назначения", вкладка KEYS);
назначьте F12
вашему физическому MB#4
- перейдите в настройки игры;
установите действие игры на F12
вместо MB#4
Теперь, когда вы нажимаете физический MB#4, игра получает F12
и активирует игровое действие.
Пропустите «Шаг 3» и перейдите к «Шаг 4».
Шаг 3.
Перейдите в GHUB (мышь, экран «Назначения»).
Отменить назначение стандартной команды «Назад» физическому MB#4 (нажмите и выберите «ОТКЛЮЧИТЬ» в раскрывающемся меню).
Отключенный MB#4 будет выглядеть как белый круг с черным внутри.
Шаг 4.
Установите скрипт (см. ниже).
Шаг 5.
Перейдите в GHUB (устройство мыши, экран «Назначения», вкладка «СИСТЕМА»).
Назначьте «Назад» вашей физической ЛКМ.
Вы увидите предупреждение о потенциально опасной операции.
Разрешите эту операцию, потому что у вас есть «запасной ЛКМ», если что-то пойдет не так.
function OnEvent(event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
PressMouseButton(1)
if IsKeyLockOn("capslock") then
repeat
MoveMouseRelative(0,4)
Sleep(10)
if not IsMouseButtonPressed(4) then break end
ReleaseMouseButton(1)
MoveMouseRelative(0,4)
Sleep(10)
PressMouseButton(1)
until not IsMouseButtonPressed(4) -- 4 = "Back"
end
elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
ReleaseMouseButton(1)
elseif event == "PROFILE_DEACTIVATED" then
ReleaseMouseButton(1)
end
end
Отличная идея, но что, если я попытаюсь смоделировать нажатие клавиши, а затем переназначу кнопку огня в игре на кнопку ключа, и это сработает, но в большинстве ситуаций было довольно неудобно переключаться между оружием. В качестве альтернативы я мог бы создать второй профиль, который имитирует нажатие клавиши и просто нажатие клавиши нажатием кнопки мыши 1, но это было бы довольно много профилей, должен сказать))
Метод переназначения кнопки огня в игре обычно не работает: если вы назначите две разные кнопки для огня, эти две кнопки не будут работать независимо (игра не позволяет вам нажать 2-ю кнопку огня, пока нажата 1-я кнопка огня).
Я думаю, что ваша душа - лучшее, что я когда-либо мог получить, правда, но мне каким-то образом удалось сделать только два отдельных профиля для игры, один с автокликом и нажатием мыши, другой просто эмулирует нажатие огнемета и просто тянет мышь вниз, работает, просто прокручивая их с помощью кнопки DPI. Я думаю, что ваше решение слишком сложное, но если у меня возникнут проблемы с моей «установкой», я просто воспользуюсь вместо этого вашим. При всей признательности, я рад, что кто-то действительно ответил с рабочим решением не через 3 года или около того на такую конкретную проблему, еще раз спасибо, приятель)
@Dainzh -
one being autoclicking
- Интересно. Как именно работает ваш профиль? Как отображаются кнопки огня в игре? Какие аргументы вы передаете PressMouseButton и IsMouseButtonPressed?Это для автоклика и перетаскивания вниз:
EnablePrimaryMouseButtonEvents(true); function OnEvent(event, arg) if IsKeyLockOn("capslock")then if IsMouseButtonPressed(1)then repeat Sleep(1,2) PressKey("v") MoveMouseRelative(0,3) Sleep(1,2) ReleaseKey("v") until not IsMouseButtonPressed(1) end end end
Это для простого перетаскивания:
EnablePrimaryMouseButtonEvents(true); function OnEvent(event, arg) if IsKeyLockOn("capslock")then if IsMouseButtonPressed(1)then repeat MoveMouseRelative(0,4) PressKey("v") Sleep(1,2) until not IsMouseButtonPressed(1) ReleaseKey("v") end end end
Я просто сопоставил клавишу для запуска в игре, и теперь я переключаюсь между этими двумя профилями с помощью кнопки DPI. И у меня еще есть свой функциональный ЛКМ, просто нужно отключить капслок.
@Dainzh - Хорошо, вы сопоставили
V
для огня. Но куда в игре привязывается ЛКМ? Если иV
, и ЛКМ сопоставлены для огня, то это означает, что игра позволяет им работать независимо (V
работает, пока ЛКМ не работает), что неверно в других играх.ЛКМ в игре ни на что не назначена, она работает как обычно в главном меню, но игра также позволяет назначить только одну клавишу на конкретное действие. Ваш вариант полезен, если игра не позволяет это изменение, что, я говорю, весьма полезно.
Спасибо. Да, ваш способ проще и на 100% работоспособен. Проблема только в том, что при нажатии ЛКМ в текстовом поле (например, чтобы ввести свое имя в начале игры) туда автоматически вставляется символ
v
, поэтому приходится временно отключать скрипт CapsLock.