Re: клик в окно 3D приложения
От: 8bit  
Дата: 28.12.07 08:25
Оценка:
Здравствуйте, 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));


но советую еще поискать, Вы не первый кто столкнулся с подобным
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.