Я пытаюсь имитировать щелчок мыши в окне с помощью JNA.Щелчок мышью с JNA
public class App {
public static final int WM_LBUTTONUP = 514;
public static final int WM_LBUTTONDOWN = 513;
public static final int WM_LBUTTONDBLCLK = 0x203;
static int WM_CLOSE = 0x10;
final static String winTitle = "Untitled - Notepad";
public static void main(String[] args) throws InterruptedException {
User32Extra user32 = (User32Extra) Native.loadLibrary("user32", User32Extra.class, W32APIOptions.DEFAULT_OPTIONS);
WinDef.HWND hwnd = user32.FindWindow(null, winTitle);
user32.SetForegroundWindow(hwnd);
Thread.sleep(1000);
long y = 77 + (22 << 16);//x + (y << 16)
WinDef.LPARAM l = new WinDef.LPARAM(y);
WinDef.WPARAM w = new WinDef.WPARAM(0);
user32.PostMessage(hwnd, WM_LBUTTONDOWN, w, l);
Thread.sleep(1000);
user32.PostMessage(hwnd, WM_LBUTTONUP, w, l);
}
}
Он находит окно и выводит его на передний план. но щелчок мышью не работает. Также выполняется отправка WM_CLOSE. Что не так с помощью мыши? Протестировано на калькулятор и блокнот. Координаты относительно окна.
+1 ... Поиск позиции окна и вывод его на передний план не может быть выполнен в чистой Java (по крайней мере, если это окно принадлежит другому приложению), поэтому JNA здесь замечательная, но ... Щелчок мышью может с помощью Java Robot. Будет ли это вариантом для вас, чтобы вы использовали свою JNA, чтобы найти окно, а затем перенести его на передний план и затем использовать простой Java-робот для имитации щелчка? – TacticalCoder
Робот перемещает реальный курсор, и это действительно раздражает. Также он требует, чтобы целевое окно не перекрывалось чем-то другим. Но с PostMessage это будет работать без перемещения курсора и даже если окно находится где-то в фоновом режиме. – NullPointer
a) * «Робот перемещает реальный курсор, и это очень раздражает» * [sic] С помощью Robot вы можете: сохранить положение мыши, переместить мышь, щелкнуть, переместить мышь в прежнее место. Это так быстро, что пользователи даже не видят его (были там, сделали это;) b) * «он требует, чтобы целевое окно не перекрывалось чем-то другим» * [sic] Вы сказали, что приносите свое окно вперед? (в большинстве случаев, когда окно находится впереди, оно впереди ... Хотя я согласен, что в некоторых случаях все еще может быть что-то еще «впереди», но это должно быть более чем редко, нет !? – TacticalCoder