Estoy tratando de aprender a interactuar con la API de Windows usando Java y el JNA (Java Native Access), pero estoy en un bloqueo de ruta. Estoy tratando de hacer que el mouse haga algo al poner en cola un evento de mouse en la secuencia de entrada del mouse, y el código funciona, porque el método SendInput(...)
devuelve 1 sugiriendo que ha puesto en cola exitosamente el evento, pero el mouse no hace nada.Cómo mover (o hacer cualquier cosa con) el mouse
Mi SSCCE:
Editar: editado a llenar el campo dwFlags. Probé varias combinaciones de constantes por sí mismos o por bits, o combiné sin éxito todavía. Una vez más, el método devuelve 1 SendInput como debe sugerir un método de funcionamiento, pero el ratón no se mueve:
import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.*;
import com.sun.jna.platform.win32.WinUser.*;
import com.sun.jna.win32.StdCallLibrary;
public class MouseUtils {
public interface User32 extends StdCallLibrary {
public static final long MOUSEEVENTF_MOVE = 0x0001L;
public static final long MOUSEEVENTF_VIRTUALDESK = 0x4000L;
public static final long MOUSEEVENTF_ABSOLUTE = 0x8000L;
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
DWORD SendInput(DWORD dWord, INPUT[] input, int cbSize);
}
public static void main(String[] args) {
INPUT input = new INPUT();
input.type = new DWORD(INPUT.INPUT_MOUSE);
input.input.mi.dx = new LONG(500);
input.input.mi.dy = new LONG(500);
input.input.mi.mouseData = new DWORD(0);
input.input.mi.dwFlags = new DWORD(User32.MOUSEEVENTF_MOVE
| User32.MOUSEEVENTF_VIRTUALDESK | User32.MOUSEEVENTF_ABSOLUTE);
// input.input.mi.dwFlags = new DWORD(0x8000L);
input.input.mi.time = new DWORD(0);
INPUT[] inArray = {input};
int cbSize = input.size(); // mouse input struct size
DWORD nInputs = new DWORD(1); // number of inputs
DWORD result = User32.INSTANCE.SendInput(nInputs , inArray, cbSize);
System.out.println("result: " + result); // return 1 if the 1 event successfully inserted
}
}
Edición 2:
hacer más lectura, y parece que mi comprensión de matrices con JNA es deficiente, que tengo que pensar en términos de matrices C donde una matriz es simplemente un puntero a una región de memoria contigua. Más por venir (¡espero!).
Offtopic: Siempre es un placer ver que ser agradable, tranquilo y agradable con la gente. Eres una de las personas que realmente busco por aquí. Felices vacaciones; y un gran año 2017! – GhostCat
@GhostCat: Su primera declaración es algo divertida, pero la segunda es muy amable. Y admiro a usted, sus habilidades y su deseo de difundir su conocimiento a los demás. –