我试图在我的Java代码中接收WM_HOTKEY事件。我已经成功地获得了一些丢失的代码,但我知道将Java GUI代码与Windows消息循环集成时需要谨慎。
似乎从Windows示例中,User32.INSTANCE.GetMessage是用于通知我使用User32.INSTANCE注册的WM_HOTKEY事件的关键功能。注册用户名。
所以...我想知道:
非常感谢帮助Java程序员了解Win API概念。
答案 0 :(得分:2)
我是否正确理解RegisterHotKey和我的消息循环必须在同一Java线程上运行?
是。 RegisterHotKey()
documentation中提到了这一点:
此功能无法将热键与另一个线程创建的窗口相关联
我是否正确理解Windows的GetMessage函数必须从我用来创建Windows的同一个线程调用,这是Java Swing的事件调度线程?
是。窗口由创建它的线程拥有,只有拥有线程才能接收窗口的消息。
如果是这样,我无法在Event Dispatch Thread上创建消息循环,因为它会阻止其他事件。我应该使用PeekMessage吗?
你可以,是的。
如果是这样,我会有轮询代码,这不是我的最爱。我应该多久调用一次PeekMessage? PeekMessage是否轻巧快速?
我建议创建一个专用线程来创建自己的窗口并使用GetMessage()作为其消息循环。