当 firefox window 使用 JNA 在后台运行时,我如何将单击鼠标和键盘事件发送到 firefox 中的 flash 插件 运行?
How can i send click mouse and keyboard events to a flash plugin running in firefox when the firefox window runs in background with JNA?
我想在 Java 中编写一个 bot,它控制 firefox 中的 flash 程序 运行。因此我必须向它发送鼠标和键盘事件。
在我的研究中,我发现了 JNA 并且已经使用它来创建 firefox window 的屏幕截图(当 firefox 在后台时它当然也可以工作,我有 firefox window 的句柄)。之后,我开始使用一些简单的鼠标事件,例如简单的左键单击(请参阅下面的代码),但我就是不工作。我用自己的简单 window 测试了它,我发送给它的事件是由 JFrame 的 MouseListener 处理的,而不是由例如 JButton 的 ActionListener 处理的。
User32 user32 = (User32) Native.loadLibrary("user32", User32.class,
W32APIOptions.DEFAULT_OPTIONS);
getRightWindowHandle(user32);
System.out.println("Got right handle");
WinDef.HWND hwnd = rightWindowHandle;
Thread.sleep(1000);
long y = 20 + (20 << 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);
System.out.println("Message posted");
Thread.sleep(1000);
user32.PostMessage(hwnd, WM_LBUTTONUP, w, l);
不幸的是,我是 JNA 的初学者,所以我不知道如何让 window 上的组件处理事件,而不是 window 本身。
任何人都可以提供一个简短的代码片段来执行此操作吗?
我也很高兴我可以搜索任何链接或关键字,以帮助我理解和消除此错误。
也有可能是其他地方的错误,但对我来说似乎就是这个错误。
ok 现在问题解决了:
而不是 firefox window 的 window 句柄,我使用了 firefox 中 plash 播放器的 window 句柄。我用 Spy++ 和 enumChildWindows() 函数得到了它。
我想在 Java 中编写一个 bot,它控制 firefox 中的 flash 程序 运行。因此我必须向它发送鼠标和键盘事件。 在我的研究中,我发现了 JNA 并且已经使用它来创建 firefox window 的屏幕截图(当 firefox 在后台时它当然也可以工作,我有 firefox window 的句柄)。之后,我开始使用一些简单的鼠标事件,例如简单的左键单击(请参阅下面的代码),但我就是不工作。我用自己的简单 window 测试了它,我发送给它的事件是由 JFrame 的 MouseListener 处理的,而不是由例如 JButton 的 ActionListener 处理的。
User32 user32 = (User32) Native.loadLibrary("user32", User32.class,
W32APIOptions.DEFAULT_OPTIONS);
getRightWindowHandle(user32);
System.out.println("Got right handle");
WinDef.HWND hwnd = rightWindowHandle;
Thread.sleep(1000);
long y = 20 + (20 << 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);
System.out.println("Message posted");
Thread.sleep(1000);
user32.PostMessage(hwnd, WM_LBUTTONUP, w, l);
不幸的是,我是 JNA 的初学者,所以我不知道如何让 window 上的组件处理事件,而不是 window 本身。 任何人都可以提供一个简短的代码片段来执行此操作吗? 我也很高兴我可以搜索任何链接或关键字,以帮助我理解和消除此错误。
也有可能是其他地方的错误,但对我来说似乎就是这个错误。
ok 现在问题解决了: 而不是 firefox window 的 window 句柄,我使用了 firefox 中 plash 播放器的 window 句柄。我用 Spy++ 和 enumChildWindows() 函数得到了它。