Tôi đang cố gắng tìm hiểu cách tương tác với Windows API bằng cách sử dụng Java và JNA (Java Native Access), nhưng đang ở một khối đường. Tôi đang cố gắng làm cho con chuột làm điều gì đó bằng cách xếp hàng sự kiện chuột trên luồng đầu vào của chuột và mã hoạt động, trong đó phương thức SendInput(...)
trả về 1 cho thấy rằng nó đã xếp hàng thành công sự kiện, nhưng bản thân con chuột không làm gì cả.Làm thế nào để di chuyển (hoặc làm bất cứ điều gì với) chuột
My SSCCE:
Edit: chỉnh sửa để điền vào các lĩnh vực dwFlags. Tôi đã thử một số kết hợp của các hằng số một mình hoặc bit hoặc kết hợp mà không thành công. Một lần nữa, phương pháp SendInput trả về 1 như nó phải gợi ý một phương pháp hoạt động, nhưng chuột không nhúc nhích:
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
}
}
Chỉnh sửa 2:
Làm đọc nhiều hơn, và có vẻ như sự hiểu biết của tôi về mảng với JNA là thiếu, mà tôi phải suy nghĩ về mảng C, nơi một mảng chỉ đơn giản là một con trỏ đến một khu vực của bộ nhớ tiếp giáp. Sắp tới (tôi hy vọng!).
Offtopic: Nó luôn luôn là một niềm vui khi nhìn thấy bạn là tốt đẹp, thoải mái và thân thiện với folks. Bạn là một trong những người tôi thực sự tra cứu quanh đây. Chúc mừng ngày lễ; và một năm tuyệt vời 2017! – GhostCat
@GhostCat: Câu đầu tiên của bạn hơi buồn cười, nhưng câu thứ hai của bạn quá tốt. Và tôi tìm đến bạn, khả năng và mong muốn của bạn để truyền bá kiến thức của bạn cho người khác. –