1

Тема: Перехват нажатия клавиш, и подобных действий управления

Есть игра, которая реагирует на движение колесика вперед-назад. Нужно сделать так, чтобы мой скрипт реагировал на движения колесика, а игра - нет. Как это сделать? Снять действия с колесика в игре не возможно - нет соответствующих опций ни в самой игре, ни в её ini-файлах - игра была портирована с Xbox на PC, причем весьма грубо.

P.S. teadrinker, вопрос ведь по-сути технический, и к играм имеет весьма косвенное отношение...

2 (изменено: Indomito, 2014-09-02 11:41:26)

Re: Перехват нажатия клавиш, и подобных действий управления

NektoN95
Начну с конца... так проще

P.S. teadrinker, вопрос ведь по-сути технический, и к играм имеет весьма косвенное отношение...

teadrinker тут не причём, вопрос к админу, а не к модератору - читай почту, я там всё пояснил, только не дал линк на ветку где задать твой вопрос... мне данная ситуация не нравится, а мотивация не понятна, но teadrinker тут не причём и ответ он не даст.

Техническая часть Вот скрипт который решит твою проблему

+ То что ты просил...
;Инициализация, сначала должна быть запущена игра, а потом скрипт
;Возможно запустить из скрипта сам игру, но этот фрагмет отсутствует, т.к. он большой
#Persistent                 ;Скрипт не выгружается
#SingleInstance             ;Запрет повторного запуска
OnExit, lEndGame            ;Точка завершения скрипта
SetTitleMatchMode, 1        ;Заголовок окна должен начинаться со значения, заданного в vWinName 
  vWinName    := "название игры - первое слово"
  cActiveGame :=  1000 * 5  ; Частота работы таймера для проверки в секундах - приблизительно не менее 3 и не более 7
SetTimer  lTimerActive, %cActiveGame%
Return

lEndGame:
  ExitApp

lTimerActive:
  If (!WinExist(vWinName))
    Gosub lEndGame ; Игры нет - выгружаем скрипт
Return
    
#UseHook, On
;Блок работает пока игра активна
;При сворацивании окна игры колёсико будет работать как ему положено
#If WinActive(vWinName) 
;****************************************    
WheelUp::
Return

WheelDown::
Return
;****************************************
#UseHook, Off
#IfWinActive

Скрипт написан по принципу "От общего к частному", т.е. его легко расширить/дополнить, а так же убрать не нужное, например таймер проверки существования окна игры

В этом скрипте таймер делает только одну вещь, а у меня в аналогичной ситуации - множество, около 8-ми проверок и подключает/отключает WheelUp/WheelDown по таймеру используя команду HotKey на основе данных из ini-файла.

Ну, а блок

#If WinActive(vWinName)
//.....
#IfWinActive

вообще отсутствует - клавиши задаются динамически.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 10 x64 Pro(AutoHotkey v1.1.37.02)

3

Re: Перехват нажатия клавиш, и подобных действий управления

+ Запуск игры из скрипта
; Запуск игры   
lStartlGame:
  If (WinExist(vWinName))
          Return ; Игра уже запущена - только релоад скрипта

  Run, %vRunTarget%, %vRunWorkDir%, UseErrorLevel, OutputVarPID
   if A_LastError ; 0 (False) если всё верно и будем обрабатывать дальше
        { 
          vRunErr := True ; Ошибка запуска
        }
      Else
        {
          WinWait, ahk_pid%OutputVarPID%,, 7 ; ждём 7 секунд до старта  
          if ErrorLevel
            {
              vRunErr := True ; Истекло время ожидания.
            }
        }
    if vRunErr
        Gosub lEndGame
Return

Переменные vRunTarget и  vRunWorkDir передаются скрипту извне или из реестра или из ini-файла

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 10 x64 Pro(AutoHotkey v1.1.37.02)

4

Re: Перехват нажатия клавиш, и подобных действий управления

Увы, не помогает, игра продолжает реагировать на колесико.

5

Re: Перехват нажатия клавиш, и подобных действий управления

Проверь по аналогии отключение любых других клавиш с помощью скрипта.

Если мышь программируемая, то переопредели WheelUp/WheelDown на другие клавиши, если игра продолжит реагировать на колёсико, то надо думать что ещё можно изобразить

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 10 x64 Pro(AutoHotkey v1.1.37.02)

6

Re: Перехват нажатия клавиш, и подобных действий управления

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

7

Re: Перехват нажатия клавиш, и подобных действий управления

Что вообще и ни где не действует? Или только в игре?
P.S. В контексте мышкиных кнопок.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 10 x64 Pro(AutoHotkey v1.1.37.02)

8

Re: Перехват нажатия клавиш, и подобных действий управления

В винде действует (т.е блокирует действие колесика), в игре нет - выполняет макрос, но игра продолжает "чувствовать" колесико.

9

Re: Перехват нажатия клавиш, и подобных действий управления

Отключи в игре "Аппаратное управление курсором", иногда помогает

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 10 x64 Pro(AutoHotkey v1.1.37.02)

10

Re: Перехват нажатия клавиш, и подобных действий управления

Увы, и этой опции нету
P.S. То есть средствами AHK сию проблему не исправить?

11

Re: Перехват нажатия клавиш, и подобных действий управления

Я с подобными проблемами не сталкивался, т.е. во всех играх исправно работает перехват или же как LAII при запуске клиента он вылетает с ошибкой - это защита от ботов.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 10 x64 Pro(AutoHotkey v1.1.37.02)