cuốn sách gpt4 ai đã làm

Cách di chuyển (hoặc sử dụng) chuột

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:12:15 41 4
mua khóa gpt4 Nike

Làm cách nào để tương tác với Windows API bằng Java và JNA (quyền truy cập gốc Java)? . Tôi đang cố gắng làm cho chuột làm điều gì đó bằng cách xếp hàng các sự kiện chuột trên luồng đầu vào của chuột và mã hoạt động vì Gửi đầu vào(...) Phương thức này trả về 1 cho biết rằng nó đã xếp hàng sự kiện thành công, nhưng bản thân con chuột không làm gì cả.

我的 SSCCE :

biên tập:Chỉnh sửa để điền vào trường dwFlags. Tôi đã thử nhiều cách kết hợp các hằng số, cả riêng lẻ và theo từng bit, nhưng vẫn không thành công. Tương tự, phương thức SendInput trả về 1 vì nó gợi ý một phương thức hợp lệ nhưng chuột không di chuyển:

nhập com.sun.jna.Native;
nhập com.sun.jna.platform.win32.WinDef.*;
nhập com.sun.jna.platform.win32.WinUser.*;
nhập com.sun.jna.win32.StdCallLibrary;

lớp công khai MouseUtils {
giao diện công cộng User32 mở rộng StdCallLibrary {
cuối cùng tĩnh công khai dài MOUSEEVENTF_MOVE = 0x0001L;
cuối cùng tĩnh công khai dài MOUSEEVENTF_VIRTUALDESK = 0x4000L;
cuối cùng tĩnh công khai dài 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 đầu vào = INPUT mới();
input.type = DWORD mới(INPUT.INPUT_MOUSE);

input.input.mi.dx = new LONG(500);
input.input.mi.dy = new LONG(500);
input.input.mi.mouseData = DWORD mới(0);
input.input.mi.dwFlags = DWORD mới(User32.MOUSEEVENTF_MOVE
| Người dùng32.MOUSEEVENTF_VIRTUALDESK | Người dùng32.MOUSEEVENTF_ABSOLUTE);
// input.input.mi.dwFlags = DWORD mới(0x8000L);
input.input.mi.time = DWORD mới (0);

INPUT[] inArray = {input};

int cbSize = input.size(); // kích thước cấu trúc đầu vào của chuột
DWORD nInputs = new DWORD(1); // số lượng đầu vào
Kết quả DWORD = User32.INSTANCE.SendInput(nInputs, inArray, cbSize);
System.out.println("result: " + result); // trả về 1 nếu sự kiện thứ 1 được chèn thành công
}
}

编辑 2:

Sau khi đọc thêm, có vẻ như sự hiểu biết của tôi về mảng JNA chưa đủ và tôi phải nghĩ đến mảng C, trong đó mảng chỉ là con trỏ tới các vùng bộ nhớ liền kề. Sẽ còn nhiều nữa (tôi hy vọng vậy!).

câu trả lời hay nhất

Tài liệu JNA Sử dụng cấu trúc và công đoàn阅读:

Các công đoàn thường có thể hoán đổi cho nhau bằng Cấu trúc, nhưng yêu cầu bạn chỉ ra trường công đoàn nào đang hoạt động với setType phương thức trước khi nó có thể được chuyển đúng cách tới một lệnh gọi hàm.

Tôi đoán bạn đã bỏ lỡ nó setType phần. Hơn nữa, khi sử dụng MOUSEEVENTF_ABSOLUTE giờ,dxnhuộm được chỉ định là tọa độ chuột, không phải pixel.

Các công việc sau đây:

giao diện công cộng User32 mở rộng StdCallLibrary {
...
chung kết tĩnh int SM_CXSCREEN = 0x0;
chung kết tĩnh int SM_CYSCREEN = 0x1;
int GetSystemMetrics(int chỉ mục);
}

public static void main(String[] args) {
...
input.input.setType("mi");
input.input.mi.dx = new LONG(500 * 65536 / User32.INSTANCE.GetSystemMetrics(User32.SM_CXSCREEN));
input.input.mi.dy = new LONG(500 * 65536 / User32.INSTANCE.GetSystemMetrics(User32.SM_CYSCREEN));
...
}

Về java - cách di chuyển (hoặc sử dụng) chuột, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8408435/

41 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress