2016-07-20 12 views
0

Ich habe ein Spiel, das FPC und meine App verwendet. Die Spiele sperren den Cursor in der Mitte des Bildschirms und bewegen die Kamera einfach im Spiel, wenn die Maus bewegt wird. Ich muss den Cursor zum angegebenen Punkt auf dem Bildschirm (im Spiel) bewegen. Ich habe versucht SetCursorPos, SendInput, mouseevent und Cursor.Position, aber keiner von ihnen hat das Zeug. Nur dieser Code (fand ich es irgendwo, aber ich kann es nicht wieder finden;)) bewegt die Maus, aber falsche positon (andere Funktionen tat nichts, wenn das Spiel auf der Spitze war):Bewegen Sie den Cursor an die angegebene Position in einer anderen Anwendung

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 Das liegt daran, dass der Cursor immer noch gesperrt ist, so dass die Funktionen immer noch versuchen, die Maus zu bewegen. Ich habe keine Ideen mehr wie das geht.

[EDIT]: Das Problem ist, dass das Spiel Raw Input verwendet. Wie wird eine Mauseingabe gesendet, die wie erwartet funktioniert, auch wenn die Option für unbearbeitete Eingabe aktiviert ist?

+0

Wenn keine dieser Funktionen funktioniert, ist es sehr wahrscheinlich, dass das Spiel Raw Input oder einen anderen Mechanismus verwendet, um Daten von der Maus zu lesen. Warum musst du das tun? Versuchen Sie Code zu schreiben, um das Spiel zu automatisieren? –

+0

Ja, ich bin. Das Programm sollte auch in anderen Programmen funktionieren, aber es ist sehr wichtig für mich, dass es in einem oder mehreren Spielen funktioniert. Wenn es Raw Input verwendet - wie macht man das dann? – g2556

+0

Okay, du hattest Recht. Ich musste die "Raw Input" -Option im Spiel abschalten. Das Programm läuft gerade, aber das Spiel läuft jetzt ... ein bisschen anders. Also möchte ich das Programm trotzdem arbeiten lassen, während der Roh-Input eingeschaltet ist Gibt es irgendwelche Möglichkeiten, das zu tun? – g2556

Antwort

0

Sie müssen Kernel-Modus-Bibliothek wie WinIO verwenden, um Raw-Eingaben zu simulieren. (Hopperfully, Ihr eigenes Programm kann im Benutzermodus arbeiten)

Verwandte Themen