Sto cercando di imparare come interagire con l'API di Windows utilizzando Java e JNA (Java Native Access), ma sono su un blocco stradale. Sto cercando di fare qualcosa facendo accodando un evento del mouse sul flusso di input del mouse, e il codice funziona, in quanto il metodo SendInput(...)
restituisce 1 suggerendo che ha accodato correttamente l'evento, ma il mouse stesso non fa nulla.Come spostare (o fare qualsiasi cosa con) il mouse
mio SSCCE:
Edit: a cura di compilare il campo dwFlags. Ho provato diverse combinazioni di costanti da sole o bit o combinate senza successo ancora. Anche in questo caso, il metodo SendInput restituisce 1 come dovrebbe suggerire un metodo di funzionamento, ma il mouse non si muove:
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
}
}
Edit 2:
Fare di più la lettura, e sembra che la mia comprensione di gli array con JNA sono carenti, che devo pensare in termini di array C in cui un array è semplicemente un puntatore a una regione di memoria contigua. Altro a venire (spero!).
offtopic: E 'sempre un piacere vedervi essere bello, rilassante e accogliente con la gente. Sei una delle persone che cerco davvero da queste parti. Buone vacanze; e un grande anno 2017! – GhostCat
@GhostCat: la tua prima affermazione è piuttosto divertente, ma la tua seconda è troppo gentile. E guardo a te, alle tue capacità e al tuo desiderio di diffondere la tua conoscenza agli altri. –