FireFox ウィンドウから Java ゲームを制御しようとしています。その Java アプレットにキー イベントとマウス イベントを送信するにはどうすればよいですか?
それが問題なら、私はWindows XPを使用しています。
編集:ここにタグがありますが、Javaでこれをやろうとしていません。C++ ソリューションが最適です。
FireFox ウィンドウから Java ゲームを制御しようとしています。その Java アプレットにキー イベントとマウス イベントを送信するにはどうすればよいですか?
それが問題なら、私はWindows XPを使用しています。
編集:ここにタグがありますが、Javaでこれをやろうとしていません。C++ ソリューションが最適です。
Robotを試してみるかもしれませんが、FireFoxでは機能しない可能性があります。abstractbutton.doClick()のようなメソッドを使用することもできます
Robotが機能しない場合は、コンポーネントにテキストを設定するだけで合成できる主要なイベントと、doClick()およびrequestFocus()を使用できるマウスイベントがあります。
それでもうまくいかない場合は、JavaScriptとHTMLページを使用して目標を達成できる可能性があります。
キーストロークで機能するものは次のとおりです。
これらの両方のアクションに推奨される方法は、SendInputを使用することです。 このWebサイトは、sendinputを理解し始めるのに最適です。
Windowsターゲットを見つけるには、 Spy++のドキュメントを使用します
しかし、私は以下に他の例を持っています:
ここでの例は、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;
}
また、マウス入力またはUser32mouse_eventを送信できるWindowsフックを確認することもできます。
[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);
}