Data registri untuk pengontrol game

Catatan

Topik ini dimaksudkan untuk produsen pengontrol game yang kompatibel Windows 10, dan tidak berlaku untuk sebagian besar pengembang.

Namespace Windows.Gaming.Input memungkinkan vendor perangkat keras independen (IHV) untuk menambahkan data ke registri PC, memungkinkan perangkat mereka untuk muncul sebagai Gamepad, RacingWheels, ArcadeSticks, FlightSticks, dan UINavigationControllers sebagaimana mestinya. Semua IHV harus menambahkan data ini untuk pengontrol yang kompatibel. Dengan melakukan ini, semua game UWP (dan game desktop apa pun yang menggunakan WinRT API) akan dapat mendukung pengontrol game Anda.

Skema pemetaan

Pemetaan untuk perangkat dengan Vendor ID (VID) VVVV, PPPP ID Produk (PID), UUUU Halaman Penggunaan, dan ID Penggunaan XXXX, akan dibaca dari lokasi ini di registri:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\VVVVPPPPUUUUXXXX

Tabel di bawah ini menjelaskan nilai yang diharapkan di bawah lokasi akar perangkat:

Nama Jenis Diperlukan? info
Nonaktif DWORD Tidak

Menunjukkan bahwa perangkat khusus ini harus dinonaktifkan.

  • 0: Perangkat tidak dinonaktifkan.
  • 1: Perangkat dinonaktifkan.
Deskripsi REG_SZTidak Deskripsi singkat tentang perangkat.

Alat penginstal perangkat Anda harus menambahkan data ini ke registri (baik melalui penyiapan atau file INF).

Subkunci di bawah lokasi akar perangkat dirinci di bagian berikut.

Gamepad

Tabel di bawah ini mencantumkan subkunjian yang diperlukan dan opsional di bawah subkunjuk Gamepad :

Subkunci Diperlukan? info
Menu Ya Lihat Pemetaan tombol
Tampilan Ya
A Ya
B Ya
X Ya
Y Ya
LeftShoulder Ya
RightShoulder Ya
LeftThumbstickButton Ya
RightThumbstickButton Ya
DPadUp Ya
DPadDown Ya
DPadLeft Ya
DPadRight Ya
Dayung1 Tidak
Dayung2 Tidak
Dayung3 Tidak
Dayung4 Tidak
LeftTrigger Ya Lihat Pemetaan sumbu
RightTrigger Ya
LeftThumbstickX Ya
LeftThumbstickY Ya
RightThumbstickX Ya
RightThumbstickY Ya

Catatan

Jika Anda menambahkan pengontrol game sebagai Gamepad yang didukung, kami sangat menyarankan Anda juga menambahkannya sebagai UINavigationController yang didukung.

RacingWheel

Tabel di bawah ini mencantumkan subkey yang diperlukan dan opsional di bawah kunci racingWheel :

Subkunci Diperlukan? info
PreviousGear Ya Lihat Pemetaan tombol
NextGear Ya
DPadUp Tidak
DPadDown Tidak
DPadLeft Tidak
DPadRight Tidak
Button1 Tidak
Tombol2 Tidak
Tombol3 Tidak
Tombol4 Tidak
Tombol5 Tidak
Tombol6 Tidak
Tombol7 Tidak
Tombol8 Tidak
Button9 Tidak
Tombol10 Tidak
Tombol11 Tidak
Tombol12 Tidak
Tombol13 Tidak
Tombol14 Tidak
Tombol15 Tidak
Tombol16 Tidak
FirstGear Tidak
SecondGear Tidak
ThirdGear Tidak
FourthGear Tidak
FifthGear Tidak
SixthGear Tidak
SeventhGear Tidak
ReverseGear Tidak
Roda Ya Lihat Pemetaan sumbu
Pembatasan Ya
Rem Ya
Kopling Tidak
Handbrake Tidak
MaxWheelAngle Ya Lihat Pemetaan properti

ArcadeStick

Tabel di bawah ini mencantumkan subkey yang diperlukan dan opsional di bawah subkunjud ArcadeStick :

Subkunci Diperlukan? info
Tindakan 1 Ya Lihat Pemetaan tombol
Tindakan2 Ya
Tindakan3 Ya
Tindakan4 Ya
Tindakan5 Ya
Action6 Ya
Spesial1 Ya
Spesial2 Ya
StickUp Ya
StickDown Ya
StickLeft Ya
StickRight Ya

FlightStick

Tabel di bawah ini mencantumkan subkunjud yang diperlukan dan opsional di bawah subkunjud FlightStick :

Subkunci Diperlukan? info
FirePrimary Ya Lihat Pemetaan tombol
FireSecondary Ya
Roll Ya Lihat Pemetaan sumbu
Kemiringan Ya
Yaw Ya
Pembatasan Ya
HatSwitch Ya Lihat Beralih pemetaan

UINavigation

Tabel di bawah ini mencantumkan subkunjang yang diperlukan dan opsional di bawah subkunjud UINavigation :

Subkunci Diperlukan? info
Menu Ya Lihat Pemetaan tombol
Tampilan Ya
Terima Ya
Batalkan Ya
PrimaryUp Ya
PrimaryDown Ya
PrimaryLeft Ya
PrimaryRight Ya
Konteks1 Tidak
Konteks2 Tidak
Konteks3 Tidak
Konteks4 Tidak
PageUp Tidak
PageDown Tidak
PageLeft Tidak
PageRight Tidak
ScrollUp Tidak
Gulir Ke Bawah Tidak
ScrollLeft Tidak
ScrollRight Tidak
SecondaryUp Tidak
SecondaryDown Tidak
SekunderLeft Tidak
SecondaryRight Tidak

Untuk informasi selengkapnya tentang pengontrol navigasi UI dan perintah di atas, lihat Pengontrol navigasi UI.

Kunci

Bagian berikut menjelaskan konten masing-masing subkunci di bawah kunci Gamepad, RacingWheel, ArcadeStick, FlightStick, dan UINavigation .

Pemetaan tombol

Tabel di bawah ini mencantumkan nilai yang diperlukan untuk memetakan tombol. Misalnya, jika menekan DPadUp pada pengontrol game, pemetaan untuk DPadUp harus berisi nilai ButtonIndex (Sumber adalah Tombol). Jika DPadUp perlu dipetakan dari posisi pengalihan, pemetaan DPadUp harus berisi nilai SwitchIndex dan SwitchPosition (Sumbernya adalah Switch).

Sumber Nama nilai Jenis nilai Diperlukan? Info nilai
Tombol ButtonIndex DWORD Ya Indeks dalam array tombol RawGameController .
Sumbu AxisIndex DWORD Ya Indeks dalam array sumbu RawGameController .
Balikkan DWORD Tidak Menunjukkan bahwa nilai sumbu harus terbalik sebelum faktor Threshold Percent dan DebouncePercent diterapkan.
ThresholdPercent DWORD Ya Menunjukkan posisi sumbu di mana nilai tombol yang dipetakan beralih antara status yang ditekan dan dirilis. Rentang nilai yang valid adalah 0 hingga 100. Tombol dianggap ditekan jika nilai sumbu lebih besar dari atau sama dengan nilai ini.
DebouncePercent DWORD Ya

Menentukan ukuran jendela di sekitar nilai ThresholdPercent , yang digunakan untuk mendebounkan status tombol yang dilaporkan. Rentang nilai yang valid adalah 0 hingga 100. Transisi status tombol hanya dapat terjadi ketika nilai sumbu melewati batas atas atau bawah jendela debounce. Misalnya, ThresholdPercent 50 dan DebouncePercent dari 10 menghasilkan batas debounce pada 45% dan 55% dari nilai sumbu rentang penuh. Tombol tidak dapat beralih ke status ditekan hingga nilai sumbu mencapai 55% atau lebih tinggi, dan tidak dapat beralih kembali ke status dirilis hingga nilai sumbu mencapai 45% atau di bawahnya.

Batas jendela debounce yang dihitung dijepit antara 0% dan 100%. Misalnya, ambang batas 5% dan jendela debounce 20% akan mengakibatkan batas jendela debounce jatuh pada 0% dan 15%. Status tombol untuk nilai sumbu 0% dan 100% selalu dilaporkan sebagai dirilis dan ditekan, masing-masing, terlepas dari nilai ambang dan debounce.

Sakelar SwitchIndex DWORD Ya Indeks dalam array sakelar RawGameController .
SwitchPosition REG_SZ Ya

Menunjukkan posisi sakelar yang akan menyebabkan tombol yang dipetakan melaporkan bahwa tombol tersebut sedang ditekan. Nilai posisi dapat berupa salah satu string ini:

  • Tombol atas
  • Tegak
  • Hak
  • Benar
  • Tidak berfungsi
  • DownLeft
  • Left
  • UpLeft
SertakanAdjacent DWORD Tidak Menunjukkan bahwa posisi sakelar yang berdekatan juga akan menyebabkan tombol yang dipetakan melaporkan bahwa itu sedang ditekan.

Pemetaan sumbu

Tabel di bawah ini mencantumkan nilai yang diperlukan untuk memetakan sumbu:

Sumber Nama nilai Jenis nilai Diperlukan? Info nilai
Tombol MaxValueButtonIndex DWORD Ya

Indeks dalam array tombol RawGameController yang diterjemahkan ke nilai sumbu searah yang dipetakan.

Tombol Maks Nilai Sumbu
FALSE 0.0
TRUE 1,0
MinValueButtonIndex DWORD Tidak

Menunjukkan bahwa sumbu yang dipetakan bersifat dua arah. Nilai MaxButton dan MinButton digabungkan menjadi satu sumbu dua arah seperti yang ditunjukkan di bawah ini.

Tombol Min Tombol Maks Nilai Sumbu
SALAH SALAH 0.5
SALAH TRUE 1,0
TRUE FALSE 0.0
TRUE TRUE 0.5
Sumbu AxisIndex DWORD Ya Indeks dalam array sumbu RawGameController .
Balikkan DWORD Tidak Menunjukkan bahwa nilai sumbu yang dipetakan harus terbalik sebelum dikembalikan.
Sakelar SwitchIndex DWORD Ya Indeks dalam array sakelar RawGameController .
MaxValueSwitchPosition REG_SZ Ya

Salah satu string berikut:

  • Tombol atas
  • Tegak
  • Hak
  • Benar
  • Tidak berfungsi
  • DownLeft
  • Left
  • UpLeft

Ini menunjukkan posisi sakelar yang menyebabkan nilai sumbu yang dipetakan dilaporkan sebagai 1,0. Arah yang berlawanan dari MaxValueSwitchPosition diperlakukan sebagai 0.0. Misalnya, jika MaxValueSwitchPositionadalah Up, terjemahan nilai sumbu ditunjukkan di bawah ini:

Ganti posisi Nilai Sumbu
Tombol atas 1,0
Pusat 0.5
Tidak berfungsi 0.0
SertakanAdjacent DWORD Tidak

Menunjukkan bahwa posisi sakelar yang berdekatan juga akan menyebabkan sumbu yang dipetakan melaporkan 1.0. Dalam contoh di atas, jika IncludeAdjacent diatur, maka terjemahan sumbu dilakukan sebagai berikut:

Ganti posisi Nilai Sumbu
Tombol atas 1,0
Tegak 1,0
UpLeft 1,0
Pusat 0.5
Tidak berfungsi 0.0
Benar 0.0
DownLeft 0.0

Beralih pemetaan

Posisi sakelar dapat dipetakan baik dari sekumpulan tombol di array tombol RawGameController atau dari indeks dalam array sakelar. Posisi switch tidak dapat dipetakan dari sumbu.

Sumber Nama nilai Jenis nilai Info nilai
Tombol ButtonCount DWORD 2, 4, atau 8
SwitchKind REG_SZ TwoWay, FourWay, atau EightWay
UpButtonIndex DWORD Lihat *Nilai ButtonIndex
DownButtonIndex DWORD
LeftButtonIndex DWORD
RightButtonIndex DWORD
UpRightButtonIndex DWORD
DownRightButtonIndex DWORD
DownLeftButtonIndex DWORD
UpLeftButtonIndex DWORD
Sumbu SwitchKind REG_SZ TwoWay, FourWay, atau EightWay
XAxisIndex DWORD YAxisIndex selalu ada. XAxisIndex hanya ada ketika SwitchKind adalah FourWay atau EightWay.
YAxisIndex DWORD
XDeadZonePercent DWORD Menunjukkan ukuran zona mati di sekitar posisi tengah sumbu.
YDeadZonePercent DWORD
XDebouncePercent DWORD Tentukan ukuran jendela di sekitar batas zona mati atas dan bawah, yang digunakan untuk mende-bounce status sakelar yang dilaporkan.
YDebouncePercent DWORD
XInvert DWORD Tunjukkan bahwa nilai sumbu yang sesuai harus dibalik sebelum zona mati dan perhitungan jendela debounce diterapkan.
YInvert DWORD
Sakelar SwitchIndex DWORD Indeks dalam array sakelar RawGameController .
Balikkan DWORD Menunjukkan bahwa sakelar melaporkan posisinya dalam urutan berlawanan arah jajar, bukan urutan searah jajar default.
PositionBias DWORD

Menggeser titik awal bagaimana posisi dilaporkan oleh jumlah yang ditentukan. PositionBias selalu dihitung searah jarang dari titik awal asli, dan diterapkan sebelum urutan nilai dibalik.

Misalnya, sakelar yang melaporkan posisi yang dimulai dengan DownRight dalam urutan berlawanan arah jarang dapat dinormalisasi dengan mengatur bendera Balikkan dan menentukan PositionBias 5:

Position Nilai yang dilaporkan Setelah Bendera PositionBias dan Invert
Benar 0 3
Hak 1 2
Tegak 2 1
Tombol atas 3 0
UpLeft 4 7
Left 5 6
DownLeft 6 5
Tidak berfungsi 7 4

*Nilai ButtonIndex

*Indeks nilai ButtonIndex ke dalam array tombol RawGameController:

ButtonCount SwitchKind RequiredMappings
2 TwoWay
  • UpButtonIndex
  • DownButtonIndex
4 Fourway
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
4 Delapan Jalan
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
8 Delapan Jalan
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
  • UpRightButtonIndex
  • DownRightButtonIndex
  • DownLeftButtonIndex
  • UpLeftButtonIndex

Pemetaan properti

Ini adalah nilai pemetaan statis untuk berbagai jenis pemetaan.

Pemetaan Nama nilai Jenis nilai Info nilai
RacingWheel MaxWheelAngle DWORD Menunjukkan sudut roda fisik maksimum yang didukung oleh roda dalam satu arah. Misalnya, roda dengan kemungkinan rotasi -90 derajat hingga 90 derajat akan menentukan 90.

Label

Label harus ada di bawah kunci Label di bawah akar perangkat. Label dapat memiliki 3 subkuntang: Tombol, Sumbu, dan Sakelar.

Label tombol

Kunci Tombol memetakan masing-masing posisi tombol di array tombol RawGameController ke string. Setiap string dipetakan secara internal ke nilai enum GameControllerButtonLabel yang sesuai. Misalnya, jika gamepad memiliki sepuluh tombol dan urutan rawGameController mengurai tombol dan menyajikannya dalam laporan tombol seperti ini:

Menu,               // Index 0
View,               // Index 1
LeftStickButton,    // Index 2
RightStickButton,   // Index 3
LetterA,            // Index 4
LetterB,            // Index 5
LetterX,            // Index 6
LetterY,            // Index 7
LeftBumper,         // Index 8
RightBumper         // Index 9

Label akan muncul dalam urutan ini di bawah tombol Tombol :

Nama Nilai (jenis: REG_SZ)
Tombol0 Menu
Button1 Tampilan
Tombol2 LeftStickButton
Tombol3 RightStickButton
Tombol4 LetterA
Tombol5 HurufB
Tombol6 LetterX
Tombol7 Lettery
Tombol8 LeftBumper
Tombol9 RightBumper

Label sumbu

Kunci Sumbu akan memetakan masing-masing posisi sumbu dalam array sumbu RawGameController ke salah satu label yang tercantum dalam GameControllerButtonLabel Enum seperti label tombol. Lihat contoh di Label tombol.

Beralih label

Peta kunci Switches mengalihkan posisi ke label. Nilai mengikuti konvensi penamaan ini: untuk memberi label posisi sakelar, yang indeksnya x dalam array switch RawGameController, tambahkan nilai-nilai ini di bawah subkunci Switches :

  • SwitchxUp
  • SwitchxUpRight
  • SwitchxRight
  • SwitchxDownRight
  • SwitchxDown
  • SwitchxDownLeft
  • SwitchxUpLeft
  • SwitchxLeft

Tabel berikut ini memperlihatkan contoh kumpulan label untuk beralih posisi sakelar 4 arah yang muncul pada indeks 0 di RawGameController:

Nama Nilai (jenis: REG_SZ)
Switch0Up XboxUp
Switch0Right XboxRight
Switch0Down XboxDown
Switch0Left XboxLeft

Contoh file registri

Untuk menunjukkan bagaimana semua pemetaan dan nilai ini disatukan, berikut adalah contoh file registri untuk RacingWheel generik:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004]
"Description" = "Example Wheel Device"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\Labels\Buttons]
"Button0" = "LetterA"
"Button1" = "LetterB"
"Button2" = "LetterX"
"Button3" = "LetterY"
"Button6" = "Menu"
"Button7" = "View"
"Button8" = "RightStickButton"
"Button9" = "LeftStickButton"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\Labels\Switches]
"Switch0Down" = "Down"
"Switch0Left" = "Left"
"Switch0Right" = "Right"
"Switch0Up" = "Up"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel]
"MaxWheelAngle" = dword:000001c2

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Brake]
"AxisIndex" = dword:00000002
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button1]
"ButtonIndex" = dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button2]
"ButtonIndex" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button3]
"ButtonIndex" = dword:00000002

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button4]
"ButtonIndex" = dword:00000003

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button5]
"ButtonIndex" = dword:00000009

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button6]
"ButtonIndex" = dword:00000008

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button7]
"ButtonIndex" = dword:00000007

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button8]
"ButtonIndex" = dword:00000006

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Clutch]
"AxisIndex" = dword:00000003
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadDown]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Down"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadLeft]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Left"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadRight]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Right"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadUp]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Up"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FifthGear]
"ButtonIndex" = dword:00000010

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FirstGear]
"ButtonIndex" = dword:0000000c

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FourthGear]
"ButtonIndex" = dword:0000000f

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\NextGear]
"ButtonIndex" = dword:00000004

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\PreviousGear]
"ButtonIndex" = dword:00000005

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\ReverseGear]
"ButtonIndex" = dword:0000000b

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\SecondGear]
"ButtonIndex" = dword:0000000d

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\SixthGear]
"ButtonIndex" = dword:00000011

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\ThirdGear]
"ButtonIndex" = dword:0000000e

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Throttle]
"AxisIndex" = dword:00000001
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Wheel]
"AxisIndex" = dword:00000000
"Invert" = dword:00000000

Lihat juga