1

Тема: AHK: Джойстиковый хук

Доброе утро, участники форума.
Известно, что AHK - это язык который удобно имитирует нажатия клавиш клавиатуры.
А геймпад он может имитировать ?

Как скриптом назначить кнопкам крестовины геймпада (вверх-вниз-влево-вправо) - кнопки стрелок клавиатуры (те же стрелки вверх-вниз...) ?
(Чтобы нажатие кнопки направления джойстика - влекло бы за собой имитацию нажатия соответствующей кнопки стрелок клавиатуры)

2

Re: AHK: Джойстиковый хук

См. абзац "Джойстик" в статье "Список клавиш и кнопок мыши/джойстика" ("List of Keys and Mouse/Joystick Buttons").

3

Re: AHK: Джойстиковый хук

ypppu, спасибо. Абзац прочитал и нашел в оригинале статьи - образец скрипта.
Вот он:


; Joystick Test Script
; https://www.autohotkey.com
; This script helps determine the button numbers and other attributes
; of your joystick. It might also reveal if your joystick is in need
; of calibration; that is, whether the range of motion of each of its
; axes is from 0 to 100 percent as it should be. If calibration is
; needed, use the operating system's control panel or the software
; that came with your joystick.

; July 6, 2005: Added auto-detection of joystick number.
; May 8, 2005 : Fixed: JoyAxes is no longer queried as a means of
; detecting whether the joystick is connected.  Some joysticks are
; gamepads and don't have even a single axis.

; If you want to unconditionally use a specific joystick number, change
; the following value from 0 to the number of the joystick (1-16).
; A value of 0 causes the joystick number to be auto-detected:
JoystickNumber = 0

; END OF CONFIG SECTION. Do not make changes below this point unless
; you wish to alter the basic functionality of the script.

; Auto-detect the joystick number if called for:
if JoystickNumber <= 0
{
	Loop 16  ; Query each joystick number to find out which ones exist.
	{
		GetKeyState, JoyName, %A_Index%JoyName
		if JoyName <>
		{
			JoystickNumber = %A_Index%
			break
		}
	}
	if JoystickNumber <= 0
	{
		MsgBox The system does not appear to have any joysticks.
		ExitApp
	}
}

#SingleInstance
SetFormat, float, 03  ; Omit decimal point from axis position percentages.
GetKeyState, joy_buttons, %JoystickNumber%JoyButtons
GetKeyState, joy_name, %JoystickNumber%JoyName
GetKeyState, joy_info, %JoystickNumber%JoyInfo
Loop
{
	buttons_down =
	Loop, %joy_buttons%
	{
		GetKeyState, joy%A_Index%, %JoystickNumber%joy%A_Index%
		if joy%A_Index% = D
			buttons_down = %buttons_down%%A_Space%%A_Index%
	}
	GetKeyState, JoyX, %JoystickNumber%JoyX
	axis_info = X%JoyX%
	GetKeyState, JoyY, %JoystickNumber%JoyY
	axis_info = %axis_info%%A_Space%%A_Space%Y%JoyY%
	IfInString, joy_info, Z
	{
		GetKeyState, JoyZ, %JoystickNumber%JoyZ
		axis_info = %axis_info%%A_Space%%A_Space%Z%JoyZ%
	}
	IfInString, joy_info, R
	{
		GetKeyState, JoyR, %JoystickNumber%JoyR
		axis_info = %axis_info%%A_Space%%A_Space%R%JoyR%
	}
	IfInString, joy_info, U
	{
		GetKeyState, JoyU, %JoystickNumber%JoyU
		axis_info = %axis_info%%A_Space%%A_Space%U%JoyU%
	}
	IfInString, joy_info, V
	{
		GetKeyState, JoyV, %JoystickNumber%JoyV
		axis_info = %axis_info%%A_Space%%A_Space%V%JoyV%
	}
	IfInString, joy_info, P
	{
		GetKeyState, joyp, %JoystickNumber%JoyPOV
		axis_info = %axis_info%%A_Space%%A_Space%POV%joyp%
	}
	ToolTip, %joy_name% (#%JoystickNumber%):`n%axis_info%`nButtons Down: %buttons_down%`n`n(right-click the tray icon to exit)
	Sleep, 100
}
return

А как внутри него - на кнопки крестовины - навесить клавиатурные клавиши ?

4

Re: AHK: Джойстиковый хук

Я имел в виду русский перевод статьи от Дед Мазай. Joy1 - Joy32, JoyX, JoyY, JoyZ. Ссылки на русский перевод есть в самой верхней (прикреплённой) теме в разделе.

5

Re: AHK: Джойстиковый хук

Посмотрел все статьи по ссылкам, никаких переводов от Дед Мазай не нашел.
И в статьях - не подписано чей перевод.
Тот скрипт который я привел - это единственный пример скрипта на тему  джойстика, который есть в этих статьях.

Скажите -  как внутри этого скрипта - на кнопки крестовины - навесить клавиатурные клавиши ?
(Сейчас просто в менюшке, которая появляется при запуске скрипта - отображается реакция на нажатие кнопок джойстика.)

6

Re: AHK: Джойстиковый хук

Вот ссылка: http://www.script-coding.com/AutoHotkey/KeyList.html
То же самое можно найти, если открыть файл AutoHotkey.chm (русский перевод) и в поисковом поле вбить слово "джойстик".
Joy1 - Joy32: кнопки джойстика.
У меня нет джойстика, попробуйте разобраться самостоятельно.

7 (изменено: Snegovik2, 2020-08-06 03:32:50)

Re: AHK: Джойстиковый хук

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

a::b

Имеется часть кода:


	GetKeyState, JoyX, %JoystickNumber%JoyX
	axis_info = X%JoyX%
	GetKeyState, JoyY, %JoystickNumber%JoyY
	axis_info = %axis_info%%A_Space%%A_Space%Y%JoyY%

Как в нем на JoyX и JoyY - назначить клавиши а и б ?
Вот так не работает:

	GetKeyState, JoyX, %JoystickNumber%JoyX::b
	axis_info = X%JoyX%
	GetKeyState, JoyY, %JoystickNumber%JoyY::a
	axis_info = %axis_info%%A_Space%%A_Space%Y%JoyY%

Вот так тоже не работает:


	GetKeyState, JoyX::b
	axis_info = X%JoyX%
	GetKeyState, JoyY::a
	axis_info = %axis_info%%A_Space%%A_Space%Y%JoyY%

Так как провести назначение клавиш ?
В статье ни слова об этом нет.

Post's attachments

Im1.jpg
Im1.jpg 10.42 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

8 (изменено: svoboden, 2020-08-06 09:08:55)

Re: AHK: Джойстиковый хук

Snegovik2, может никак не сделаете. Переназначение типа Joy1::a не рекомендуется, а a::Joy1 вообще не возможно: https://www.autohotkey.com/boards/viewt … p+joystick.

9 (изменено: Snegovik2, 2020-08-06 03:32:28)

Re: AHK: Джойстиковый хук

svoboden, вот смотрите.

Запускаю имеющийся скрипт - рядом с курсором мыши появляется меню, на котором отображаются нажатия кнопок подключенного джойстика.
При нажатии кнопок креста - меняются данные, которые я обвел красным карандашом
Пока ничего не нажато - показатели: X050 Y050
Если нажать на кресте джойстика - "кнопку вверх", то показатели в этой менюшке - будут: X050 Y000
(то есть скрипт прекрасно реагирует на кнопки джойстика)

Как в имеющемся скрипте поставить условие, навроде - ЕСЛИ X050 и Y000 -> то ::{UP}  ?

Post's attachments

1.rar 20.37 kb, 2 downloads since 2020-08-06 

You don't have the permssions to download the attachments of this post.

10 (изменено: svoboden, 2020-08-06 17:26:33)

Re: AHK: Джойстиковый хук

Snegovik2:


Loop {
JoyY := GetKeyState("JoyY")
if (JoyY = 0) 
{
msgbox send up
}
sleep 2
}

11

Re: AHK: Джойстиковый хук

svoboden
спасибо - все работает.
А можно ввести ограничение по времени - сколько действует это имитированное нажатие на кнопку "UP" ?

12

Re: AHK: Джойстиковый хук

Snegovik2

Можно организовать работу цикла только при нажатии кнопки, затем как отпустишь - перестанет.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

13

Re: AHK: Джойстиковый хук

http://forum.script-coding.com/viewtopi … 41#p141541

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14 (изменено: svoboden, 2020-08-09 04:51:47)

Re: AHK: Джойстиковый хук

Snegovik2 пишет:

А можно ввести ограничение по времени - сколько действует это имитированное нажатие на кнопку

Так один раз посылает кнопку up:

Loop {
JoyY := GetKeyState("JoyY")
if (JoyY = 0) 
{
send {up}
sleep 100
}
sleep 2
}

15

Re: AHK: Джойстиковый хук

svoboden, теперь все нормально работает.
Спасибо.