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 7 x64
AHK 1.1.30.01

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 7 x64
AHK 1.1.30.01

4

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

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

5

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

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

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AHK 1.1.30.01

6

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

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

7

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

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AHK 1.1.30.01

8

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

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

9

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

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AHK 1.1.30.01

10

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

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

11

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

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AHK 1.1.30.01