102 Patches: Detours to the Rescue
C reference for DttR maintainers and modders.
Loading...
Searching...
No Matches
hook_getasynckeystate.c
Go to the documentation of this file.
1#include <SDL3/SDL.h>
2#include <windows.h>
3
4#include "hooks_private.h"
5
6#define GETASYNCKEYSTATE_KEY_PRESSED 0x8000
7
8static const SDL_Scancode vk_to_scancode[256] = {
9 ['A'] = SDL_SCANCODE_A,
10 ['B'] = SDL_SCANCODE_B,
11 ['C'] = SDL_SCANCODE_C,
12 ['D'] = SDL_SCANCODE_D,
13 ['E'] = SDL_SCANCODE_E,
14 ['F'] = SDL_SCANCODE_F,
15 ['G'] = SDL_SCANCODE_G,
16 ['H'] = SDL_SCANCODE_H,
17 ['I'] = SDL_SCANCODE_I,
18 ['J'] = SDL_SCANCODE_J,
19 ['K'] = SDL_SCANCODE_K,
20 ['L'] = SDL_SCANCODE_L,
21 ['M'] = SDL_SCANCODE_M,
22 ['N'] = SDL_SCANCODE_N,
23 ['O'] = SDL_SCANCODE_O,
24 ['P'] = SDL_SCANCODE_P,
25 ['Q'] = SDL_SCANCODE_Q,
26 ['R'] = SDL_SCANCODE_R,
27 ['S'] = SDL_SCANCODE_S,
28 ['T'] = SDL_SCANCODE_T,
29 ['U'] = SDL_SCANCODE_U,
30 ['V'] = SDL_SCANCODE_V,
31 ['W'] = SDL_SCANCODE_W,
32 ['X'] = SDL_SCANCODE_X,
33 ['Y'] = SDL_SCANCODE_Y,
34 ['Z'] = SDL_SCANCODE_Z,
35 ['0'] = SDL_SCANCODE_0,
36 ['1'] = SDL_SCANCODE_1,
37 ['2'] = SDL_SCANCODE_2,
38 ['3'] = SDL_SCANCODE_3,
39 ['4'] = SDL_SCANCODE_4,
40 ['5'] = SDL_SCANCODE_5,
41 ['6'] = SDL_SCANCODE_6,
42 ['7'] = SDL_SCANCODE_7,
43 ['8'] = SDL_SCANCODE_8,
44 ['9'] = SDL_SCANCODE_9,
45 [VK_RETURN] = SDL_SCANCODE_RETURN,
46 [VK_ESCAPE] = SDL_SCANCODE_ESCAPE,
47 [VK_BACK] = SDL_SCANCODE_BACKSPACE,
48 [VK_TAB] = SDL_SCANCODE_TAB,
49 [VK_SPACE] = SDL_SCANCODE_SPACE,
50 [VK_F1] = SDL_SCANCODE_F1,
51 [VK_F2] = SDL_SCANCODE_F2,
52 [VK_F3] = SDL_SCANCODE_F3,
53 [VK_F4] = SDL_SCANCODE_F4,
54 [VK_F5] = SDL_SCANCODE_F5,
55 [VK_F6] = SDL_SCANCODE_F6,
56 [VK_F7] = SDL_SCANCODE_F7,
57 [VK_F8] = SDL_SCANCODE_F8,
58 [VK_F9] = SDL_SCANCODE_F9,
59 [VK_F10] = SDL_SCANCODE_F10,
60 [VK_F11] = SDL_SCANCODE_F11,
61 [VK_F12] = SDL_SCANCODE_F12,
62 [VK_INSERT] = SDL_SCANCODE_INSERT,
63 [VK_DELETE] = SDL_SCANCODE_DELETE,
64 [VK_HOME] = SDL_SCANCODE_HOME,
65 [VK_END] = SDL_SCANCODE_END,
66 [VK_PRIOR] = SDL_SCANCODE_PAGEUP,
67 [VK_NEXT] = SDL_SCANCODE_PAGEDOWN,
68 [VK_RIGHT] = SDL_SCANCODE_RIGHT,
69 [VK_LEFT] = SDL_SCANCODE_LEFT,
70 [VK_DOWN] = SDL_SCANCODE_DOWN,
71 [VK_UP] = SDL_SCANCODE_UP,
72 [VK_CONTROL] = SDL_SCANCODE_LCTRL,
73 [VK_LCONTROL] = SDL_SCANCODE_LCTRL,
74 [VK_RCONTROL] = SDL_SCANCODE_RCTRL,
75 [VK_SHIFT] = SDL_SCANCODE_LSHIFT,
76 [VK_LSHIFT] = SDL_SCANCODE_LSHIFT,
77 [VK_RSHIFT] = SDL_SCANCODE_RSHIFT,
78 [VK_MENU] = SDL_SCANCODE_LALT,
79 [VK_LMENU] = SDL_SCANCODE_LALT,
80 [VK_RMENU] = SDL_SCANCODE_RALT,
81 [VK_NUMPAD0] = SDL_SCANCODE_KP_0,
82 [VK_NUMPAD1] = SDL_SCANCODE_KP_1,
83 [VK_NUMPAD2] = SDL_SCANCODE_KP_2,
84 [VK_NUMPAD3] = SDL_SCANCODE_KP_3,
85 [VK_NUMPAD4] = SDL_SCANCODE_KP_4,
86 [VK_NUMPAD5] = SDL_SCANCODE_KP_5,
87 [VK_NUMPAD6] = SDL_SCANCODE_KP_6,
88 [VK_NUMPAD7] = SDL_SCANCODE_KP_7,
89 [VK_NUMPAD8] = SDL_SCANCODE_KP_8,
90 [VK_NUMPAD9] = SDL_SCANCODE_KP_9,
91 [VK_MULTIPLY] = SDL_SCANCODE_KP_MULTIPLY,
92 [VK_ADD] = SDL_SCANCODE_KP_PLUS,
93 [VK_SUBTRACT] = SDL_SCANCODE_KP_MINUS,
94 [VK_DECIMAL] = SDL_SCANCODE_KP_PERIOD,
95 [VK_DIVIDE] = SDL_SCANCODE_KP_DIVIDE,
96};
97
99 if (vkey < 0 || vkey >= (int)SDL_arraysize(vk_to_scancode)) {
100 return 0;
101 }
102
103 const SDL_Scancode scancode = vk_to_scancode[vkey];
104
105 if (scancode == SDL_SCANCODE_UNKNOWN) {
106 return 0;
107 }
108
109 const bool *keyboard_state = SDL_GetKeyboardState(NULL);
110
111 return keyboard_state[scancode] ? (SHORT)GETASYNCKEYSTATE_KEY_PRESSED : 0;
112}
DTTR_Graphics_COM_DirectDrawSurface7 DWORD flags void NULL
#define GETASYNCKEYSTATE_KEY_PRESSED
static const SDL_Scancode vk_to_scancode[256]
SHORT dttr_inputs_hook_get_async_key_state_callback(int vkey)