Added mouse/keyboard for Windows through SendInput
This commit is contained in:
@@ -122,7 +122,7 @@ uint16_t keysym(uint16_t modcode) {
|
|||||||
case 0x2B:
|
case 0x2B:
|
||||||
return XK_Execute;
|
return XK_Execute;
|
||||||
case 0x2C:
|
case 0x2C:
|
||||||
return XK_Print; //FIXME: is this correct? (printscreen)
|
return XK_Print;
|
||||||
case 0x2D:
|
case 0x2D:
|
||||||
return XK_Insert;
|
return XK_Insert;
|
||||||
case 0x2E:
|
case 0x2E:
|
||||||
@@ -134,15 +134,15 @@ uint16_t keysym(uint16_t modcode) {
|
|||||||
case 0x6B:
|
case 0x6B:
|
||||||
return XK_KP_Add;
|
return XK_KP_Add;
|
||||||
case 0x6C:
|
case 0x6C:
|
||||||
return XK_KP_Decimal; //FIXME: is this correct? (Comma)
|
return XK_KP_Decimal;
|
||||||
case 0x6D:
|
case 0x6D:
|
||||||
return XK_KP_Subtract;
|
return XK_KP_Subtract;
|
||||||
case 0x6E:
|
case 0x6E:
|
||||||
return XK_KP_Separator; //FIXME: is this correct? (Period)
|
return XK_KP_Separator;
|
||||||
case 0x6F:
|
case 0x6F:
|
||||||
return XK_KP_Divide;
|
return XK_KP_Divide;
|
||||||
case 0x90:
|
case 0x90:
|
||||||
return XK_Num_Lock; //FIXME: is this correct: (NumlockClear)
|
return XK_Num_Lock;
|
||||||
case 0x91:
|
case 0x91:
|
||||||
return XK_Scroll_Lock;
|
return XK_Scroll_Lock;
|
||||||
case 0xA0:
|
case 0xA0:
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winuser.h>
|
||||||
|
|
||||||
|
#include "sunshine/main.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
namespace platf {
|
namespace platf {
|
||||||
@@ -10,10 +14,80 @@ input_t input() {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_mouse(input_t &input, int deltaX, int deltaY) {}
|
void move_mouse(input_t &input, int deltaX, int deltaY) {
|
||||||
void button_mouse(input_t &input, int button, bool release) {}
|
INPUT i {};
|
||||||
void scroll(input_t &input, int distance) {}
|
|
||||||
void keyboard(input_t &input, uint16_t modcode, bool release) {}
|
i.type = INPUT_MOUSE;
|
||||||
|
auto &mi = i.mi;
|
||||||
|
|
||||||
|
mi.dwFlags = MOUSEEVENTF_MOVE;
|
||||||
|
mi.dx = deltaX;
|
||||||
|
mi.dy = deltaY;
|
||||||
|
|
||||||
|
auto send = SendInput(1, &i, sizeof(INPUT));
|
||||||
|
if(send != 1) {
|
||||||
|
BOOST_LOG(warning) << "Couldn't send mouse movement input"sv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void button_mouse(input_t &input, int button, bool release) {
|
||||||
|
INPUT i {};
|
||||||
|
|
||||||
|
i.type = INPUT_MOUSE;
|
||||||
|
auto &mi = i.mi;
|
||||||
|
|
||||||
|
if(button == 1) {
|
||||||
|
mi.dwFlags = release ? MOUSEEVENTF_LEFTUP : MOUSEEVENTF_LEFTDOWN;
|
||||||
|
}
|
||||||
|
else if(button == 2) {
|
||||||
|
mi.dwFlags = release ? MOUSEEVENTF_MIDDLEUP : MOUSEEVENTF_MIDDLEDOWN;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mi.dwFlags = release ? MOUSEEVENTF_RIGHTUP : MOUSEEVENTF_RIGHTDOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto send = SendInput(1, &i, sizeof(INPUT));
|
||||||
|
if(send != 1) {
|
||||||
|
BOOST_LOG(warning) << "Couldn't send mouse button input"sv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void scroll(input_t &input, int distance) {
|
||||||
|
INPUT i {};
|
||||||
|
|
||||||
|
i.type = INPUT_MOUSE;
|
||||||
|
auto &mi = i.mi;
|
||||||
|
|
||||||
|
mi.dwFlags = MOUSEEVENTF_WHEEL;
|
||||||
|
mi.mouseData = distance / 120;
|
||||||
|
|
||||||
|
auto send = SendInput(1, &i, sizeof(INPUT));
|
||||||
|
if(send != 1) {
|
||||||
|
BOOST_LOG(warning) << "Couldn't send moue movement input"sv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void keyboard(input_t &input, uint16_t modcode, bool release) {
|
||||||
|
if(modcode == VK_RMENU) {
|
||||||
|
modcode = VK_LBUTTON;
|
||||||
|
}
|
||||||
|
|
||||||
|
INPUT i {};
|
||||||
|
i.type = INPUT_KEYBOARD;
|
||||||
|
auto &ki = i.ki;
|
||||||
|
|
||||||
|
// ki.dwFlags = KEYEVENTF_SCANCODE;
|
||||||
|
if(release) {
|
||||||
|
ki.dwFlags = KEYEVENTF_KEYUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
ki.wVk = modcode;
|
||||||
|
|
||||||
|
auto send = SendInput(1, &i, sizeof(INPUT));
|
||||||
|
if(send != 1) {
|
||||||
|
BOOST_LOG(warning) << "Couldn't send moue movement input"sv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
namespace gp {
|
namespace gp {
|
||||||
void dpad_y(input_t &input, int button_state) {} // up pressed == -1, down pressed == 1, else 0
|
void dpad_y(input_t &input, int button_state) {} // up pressed == -1, down pressed == 1, else 0
|
||||||
|
|||||||
Reference in New Issue
Block a user