2016-07-20 3 views
0

У меня есть игра, в которой используется FPC и мое приложение. Игры блокируют курсор в центре экрана и просто перемещают камеру в игру при перемещении мыши. Мне нужно переместить курсор в указанную точку на экране (в игре). Я пробовал SetCursorPos, SendInput, mouseevent и Cursor.Position, но никто из них не делал этого. Только этот код (я нашел его где-нибудь, но я не могу найти его снова;)) переместил мышь, но к неправильному positon (другие функции не сделали ничего, если игра была на вершине):Перемещение курсора в указанную позицию в другом приложении

private const int MOUSEEVENTF_ABSOLUTE = 0x8000; 
private const int MOUSEEVENTF_MOVE = 0x0001; 

public static void MoveTo(float x, float y) 
{ 
    float min = 0; 
    float max = UInt16.MaxValue; 

    int mappedX = (int)Remap(x, 0.0f, Screen.PrimaryScreen.Bounds.Width, min, max); 
    int mappedY = (int)Remap(y, 0.0f, Screen.PrimaryScreen.Bounds.Height, min, max); 

    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, mappedX, mappedY, 0, 0); 
} 


public static float Remap(float value, float from1, float to1, float from2, float to2) 
{ 
    return (value - from1)/(to1 - from1) * (to2 - from2) + from2; 
} 

I думаю, это потому, что курсор все еще заблокирован, поэтому функции все еще пытаются переместить мышь. У меня больше нет идей, как это сделать.

[EDIT]: Проблема в том, что в игре используется исходный вход. Как отправить ввод мыши, который будет работать, как ожидалось, даже если включена опция сырого ввода?

+0

Если ни одна из этих функций не работает, очень вероятно, что в игре используется Raw Input или какой-либо другой механизм для чтения данных с мыши. Зачем вам это нужно? Вы пытаетесь написать код для автоматизации игры? –

+0

Да, я. Программа также должна работать и в других программах, но для меня очень важно заставить ее работать в играх. Если он использует Raw Input - как это сделать? – g2556

+0

Хорошо, ты был прав. Мне пришлось отключить опцию «Raw Input» в игре. Программа работает прямо сейчас, но сейчас игра в игру немного отличается. Поэтому я все еще хочу заставить программу работать, пока Raw Input включен Есть ли какие-либо способы сделать это? – g2556

ответ

0

Для моделирования исходных входов вам необходимо использовать библиотеку режима ядра, например WinIO. (Хотелось бы, ваша собственная программа может работать в режиме пользователя)