我正在尝试用 Java 创建一个自动点击器(这是我所知道的语言,而且我刚刚学习了线程)。我想让小程序在它自己的窗口中打开(而不是在网页上),并且我希望能够使用空格键启动和停止程序而不选择窗口,以便我可以在另一个程序上使用自动点击器并能够停止它而不需要 alt-f4ing 一堆东西。
有什么可以帮助我的吗?或者您有什么建议吗?
迟到的答案,但希望有帮助:)
您可以使用 JNA,这很容易!
- 获取 JNA (jna.jar)
-
在表单中为 User32 (User32.dll) 创建您自己的映射
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("User32", User32.class, Options.UNICODE_OPTIONS);
// dwWakeMask Constants
public static final int QS_ALLEVENTS = 0x04BF;
public static final int QS_ALLINPUT = 0x04FF;
public static final int QS_ALLPOSTMESSAGE = 0x0100;
public static final int QS_HOTKEY = 0x0080;
public static final int QS_INPUT = 0x407;
public static final int QS_KEY = 0x0001;
public static final int QS_MOUSE = 0x0006;
public static final int QS_MOUSEBUTTON = 0x0004;
public static final int QS_MOUSEMOVE = 0x0002;
public static final int QS_PAINT = 0x0020;
public static final int QS_POSTMESSAGE = 0x0008;
public static final int QS_RAWINPUT = 0x0400;
public static final int QS_SENDMESSAGE = 0x0040;
public static final int QS_TIMER = 0x0010;
public static final int INFINITE = 0xFFFFFFFF;
/*
DWORD WINAPI MsgWaitForMultipleObjects(
__in DWORD nCount,
__in const HANDLE *pHandles,
__in BOOL bWaitAll,
__in DWORD dwMilliseconds,
__in DWORD dwWakeMask
);*/
int MsgWaitForMultipleObjects(int nCount, Pointer pHandles, boolean bWaitAll, int dwMilliSeconds, int dwWakeMask);
/* fsModifiers vaues */
public static final int MOD_ALT = 0x0001;
public static final int MOD_CONTROL = 0x0002;
public static final int MOD_NOREPEAT = 0x4000;
public static final int MOD_SHIFT = 0x0004;
public static final int MOD_WIN = 0x0008;
/* BOOL WINAPI RegisterHotKey(
__in_opt HWND hWnd,
__in int id,
__in UINT fsModifiers,
__in UINT vk
);
*/
boolean RegisterHotKey(Pointer hWnd, int id, int fsModifiers, int vk);
}
只需查看以下几页即可清楚地了解其幕后工作原理:
h**p://msdn.microsoft.com/en-us/library/ms646309%28VS.85%29.aspx
h**p://msdn.microsoft.com/en-us/library/ms684242%28VS.85%29.aspx
- 检查此页面以了解您可以为其注册回调的关键常量
h**p://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx
- 创建一个像这样的测试程序:
User32 user32 = User32.INSTANCE;
boolean res = user32.RegisterHotKey(Pointer.NULL, 9999, User32.MOD_ALT | User32.MOD_CONTROL, WINUSER.VK_LEFT);
if(!res)
System.out.println("Couldn't register hotkey");
System.out.println("Starting and waiting");
user32.MsgWaitForMultipleObjects(0, Pointer.NULL, true, User32.INFINITE, User32.QS_HOTKEY);
System.out.println("Ending");
User32.INFINITE 是一个未记录的常量,值为 0xFFFFFFFF
很抱歉将 http 链接重命名为 h**p :) Stackoverflow 规则
斯特凡诺
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)