代码之家  ›  专栏  ›  技术社区  ›  Tobias

当firefox窗口在JNA后台运行时,我如何向运行在firefox中的flash插件发送点击鼠标和键盘事件?

  •  0
  • Tobias  · 技术社区  · 9 年前

    我想用Java编程一个机器人,它控制在firefox中运行的flash程序。因此,我必须向它发送鼠标和键盘事件。 在我的研究中,我找到了JNA,并已将其用于创建firefox窗口的屏幕截图(当然,当firefox在后台时,它也可以工作,我有firefox窗的句柄)。之后,我开始了一些简单的鼠标事件,比如简单的左键单击(见下面的代码),但我就是不工作。我用自己的简单窗口测试了它,我发送给它的事件是由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的绝对初学者,所以我不知道如何使事件由窗口上的组件处理,而不是由窗口本身处理。 有人能给我一个简短的代码片段吗? 我也很高兴能搜索到任何有助于我理解和消除此错误的链接或关键字。

    也有可能是其他地方出了错,但对我来说,这似乎是个错误。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Tobias    9 年前

    ok现在解决了问题: 我使用了firefox中plash播放器的窗口句柄,而不是firefox窗口的窗口句柄。我用Spy++和enumChildWindows()函数得到了它。