1 (изменено: Dashkov, 2011-07-22 00:07:58)

Тема: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

Добрый день, уважаемые специалисты. Прошу помощи для чайника. Необходимо заменить прокрутку колесом мыши вверх и вниз на нажатие клавиатурных кнопок UpArrow и DownArrow. Замена этих кнопок необходима для прокрутки меню вверх и вниз в игре Dune 2000, т.к. меню там прокручивается либо постоянным кликанием, либо стрелками вверх и вниз на клавиатуре. Было бы удобно реализовать перемещение по меню при помощи колеса прокрутки, но пока у меня не получается это сделать. Пробовал массу программ известных, но не работает, т.к. мышь обычная. В результате наткнулся на AutoHotKey и сделал следующий скрипт:

 

WheelDown::Down
WheelUp::Up

Сначала подумал что теперь все будет работать корректно, т.к. выделение строк файлов в проводнике можно было перемещать колесом мыши, вместо стрелок вверх и вниз, однако когда запустил игру, то оказалось, что скрипт работает как-то странно:

Если прокручиваю вниз, то меню в игре сразу опускается до самого низа и его не возможно поднять снова наверх, словно операция прокрутки вниз зацикливается. Если при этом нажать на клавишу вниз или вверх на клавиатуре, то можно снова нормально прокручивать меню.

Хотелось бы реализовать прокрутку колесом мыши, что бы прокручивание меню отрабатывало аналогично как если бы нажимал стрелки вверх и вниз на клавиатуре и функция не отрабатывала бы в игре циклично. Спасибо.

2 (изменено: Grey, 2011-07-22 00:19:15)

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

WheelUp::
   Hotkey, WheelUp, WheelUp, Off
   Send, {Up}
   Sleep, 250
   Hotkey, WheelUp, WheelUp, On
   Return

WheelDown::
   Hotkey, WheelDown, WheelDown, Off
   Send, {Down}
   Sleep, 250
   Hotkey, WheelDown, WheelDown, On
   Return

3 (изменено: Dashkov, 2011-07-21 23:26:40)

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

Спасибо, Grey,

К сожалению не помогло. В проводнике перемещение выделения работает корректно в соответствии с выставленной задержкой в коде, а в игре вообще не реагирует. Пробовал в этом коде полностью убрать задержку "Sleep", но никаких результатов. Возможно из-за изначально кривой реализации игры не получится впринципе реализовать то что я хочу. Либо делать эмуляцию передвижения курсора мыши в нужную область и клика мышки на каждое передвижение прокрутки.

4 (изменено: Grey, 2011-07-22 00:19:33)

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

#IfWinActive

5

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

Попробовал указать #IfWinActive в начале кода или строку "#IfWinActive ahk_class Dune2000" и ничего не дало. Хотя может и не должно было дать, т.к. больше методом научного тыка пробую.

6

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

Для теста можно заменить

Send, {Up}

на

SoundBeep

7

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

Попробовал заменить следующим образом:

WheelUp::
   Hotkey, WheelUp, WheelUp, Off
   SoundBeep
   Sleep, 250
   Hotkey, WheelUp, WheelUp, On
   Return
 
WheelDown::
   Hotkey, WheelDown, WheelDown, Off
   Send, {Down}
   Sleep, 250
   Hotkey, WheelDown, WheelDown, On
   Return

Звука никакого не слышно, не в винде не в игре. Вообще странно, что в XP написанная вами функция корректно работает, а в игре ни малейшей реакции на прокрутку.

8

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

WheelUp::Send, {Up}
WheelDown::Send, {Down}
vk9f::
   Hotkey, vk9f, vk9f, Off
   Send, {sc148}
   Sleep, 250
   Hotkey, vk9f, vk9f, On
   Return

vk9e::
   Hotkey, vk9e, vk9e, Off
   Send, {sc150}
   Sleep, 250
   Hotkey, vk9e, vk9e, On
   Return

SendMode

9

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

Как и раньше в винде все гуд, а в игре не отрабатывает.

Пробовал так же вариант:

WheelUp::Sendplay, {Up}
WheelDown::Sendplay, {Down}

Тоже в XP работает корректно, а в игре ноль внимания.

10

Re: AHK: Замена колеса прокрутки на нажатие кнопок клавиатуры

Самое забавное, что даже когда сделал следуюзим образом, то желаемого результата не добился:

E::ControlClick, x578 y384, ahk_class Dune2000

В этом случае, что бы при нажатии кнопки "E" отработала перекрутка в меню игры необходимо было навести курсор мыши на нужную кнопку, хотя я рассчитывал, что вышеуказанный код поможет автоматически перемещать курсор в эту область и кликать левой кнопкой мыши. Не тут-то было.