如何将键和鼠标事件发送到Java applet?

时间:2012-04-21 15:43:02

标签: java c++ winapi visual-c++ applet

我正试图从FireFox窗口控制一些Java游戏。如何将密钥和鼠标事件发送到该Java小程序?

如果重要的话,我正在使用Windows XP。

编辑:即使我在这里有标记,我也不是想用Java做这件事。 c ++解决方案将是最佳的。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Robot,但这可能无法在FireFox中使用。您还可以使用abstractbutton.doClick()

等方法

如果Robot不起作用,只需在组件上设置文本就可以合成的关键事件,以及可以使用的鼠标事件doClick()和requestFocus()

如果这些都不起作用,您可以使用javascript和html页面完成目标。

答案 1 :(得分:0)

以下是适用于击键的内容:

这两项操作的推荐方法都是使用SendInput 这个网站非常适合开始understand sendinput

要查找Windows目标,请使用Spy++documentation

但我确实有以下其他例子:

此处的示例适用于使用postmessage的记事本。

#include "TCHAR.h"
#include "Windows.h"

int _tmain(int argc, _TCHAR* argv[])
{
    HWND hwndWindowTarget;
    HWND hwndWindowNotepad = FindWindow(NULL, L"Untitled - Notepad");
    if (hwndWindowNotepad)
    {
        // Find the target Edit window within Notepad.
        hwndWindowTarget = FindWindowEx(hwndWindowNotepad, NULL, L"Edit", NULL);
        if (hwndWindowTarget) {
            PostMessage(hwndWindowTarget, WM_CHAR, 'G', 0);
        }
    }

    return 0;
}

您可能还想查看可以发送鼠标输入的windows hooksUser32 mouse_event

[DllImport("User32.Dll")]
private static extern void mouse_event(UInt32 dwFlags, int dx, int dy, UInt32 dwData, int dwExtraInfo);

[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y); 

public enum MouseEventFlags
{
    LEFTDOWN = 0x00000002,
    LEFTUP = 0x00000004,
    MIDDLEDOWN = 0x00000020,
    MIDDLEUP = 0x00000040,
    MOVE = 0x00000001,
    ABSOLUTE = 0x00008000,
    RIGHTDOWN = 0x00000008,
    RIGHTUP = 0x00000010
}

public static void SendLeftClick(int X, int Y)
{
    mouse_event((uint)MouseEventFlags.LEFTDOWN, 0, 0, 0, 0);
    mouse_event((uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0);
}