Здравствуйте, Rinikon, Вы писали:
В 3D приложениях пользовательский ввод в основном делают через
DirectInput (на win платформе), поэтому ваш способ не будет работать.
Предлагаю погуглить по "SendInput directX window" и почитать по данному вопросу.
Мнения не однозначные у кого-то работает SendInput, у кого-то нет
Для клавиатуры, как я понял, основная особенность, это то что надо посылать сканкоды от DI.
INPUT inp;
memset(inp,0,sizeof(INPUT));
inp.type = INPUT_KEYBOARD;
inp.ki.dwFlags = KEYEVENTF_SCANCODE;
inp.ki.dwFlags |= KEYEVENTF_KEYUP;
inp.ki.wScan = DIK_Q;
SendInput(1, &inp, sizeof(INPUT));
А примерно так выглядит для мыши:
POINTS pts;
pts.x = 100;
pts.y = 100;
// Get total screen coordinates
screen_x = GetSystemMetrics(SM_CXSCREEN);
screen_y = GetSystemMetrics(SM_CYSCREEN);
// Get location of window
GetWindowPlacement(hWnd, &wp);
// MOUSEINPUT struct uses a truely bizarre coordinate system
// the screen is mapped to a scale from 0 to 65535 in both axis.
//Rectangle screen = Screen.PrimaryScreen.Bounds;
x = ( 65535 * (pts.x + wp.rcNormalPosition.left) ) / screen_x;
y = ( 65535 * (pts.y + wp.rcNormalPosition.top) ) / screen_y;
buffer.type = INPUT_MOUSE;
buffer.mi.dx = x;
buffer.mi.dy = y;
buffer.mi.mouseData = 0;
buffer.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE);
buffer.mi.time = 0;
buffer.mi.dwExtraInfo = 0;
SendInput(1,&buffer,sizeof(buffer));
но советую еще поискать, Вы не первый кто столкнулся с подобным