首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JNA在Java代码中使用GetMessage或PeekMessage的安全方法是什么?

使用JNA在Java代码中使用GetMessage或PeekMessage的安全方法是什么?
EN

Stack Overflow用户
提问于 2014-07-10 17:59:51
回答 1查看 795关注 0票数 1

我试图在我的Java代码中接收WM_HOTKEY事件。我已经成功地完成了一些丢弃代码的工作,但我知道将Java代码与Windows消息循环集成需要谨慎。

从Windows示例中可以看出,User32.INSTANCE.GetMessage是通知我注册使用User32.INSTANCE.RegisterHotKey的WM_HOTKEY事件的关键函数。

所以.我想知道

  • 我是否正确地理解了RegisterHotKey和我的消息循环必须运行在同一个Java线程上?
  • 我是否正确地理解了必须从创建GetMessage的线程调用Windows的GetMessage函数,即Java的事件调度线程?
  • 如果是这样的话,我无法在事件调度线程上创建一个消息循环,因为它会阻止其他事件。我应该用PeekMessage代替吗?
  • 如果是这样的话,我会有轮询代码,这不是我最喜欢的。我应该多久打一次电话给PeekMessage?PeekMessage又轻又快吗?

非常感谢您帮助Java程序员了解Win API的概念。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-10 19:17:39

我是否正确地理解了RegisterHotKey和我的消息循环必须运行在同一个Java线程上?

是。在RegisterHotKey() 文档中提到了这一点。

此函数不能将热键与另一个线程创建的窗口相关联。

我是否正确地理解了必须从创建GetMessage的线程调用Windows的GetMessage函数,即Java的事件调度线程?

是。创建窗口的线程拥有窗口,只有拥有的线程才能接收窗口的消息。

如果是这样的话,我无法在事件调度线程上创建一个消息循环,因为它会阻止其他事件。我应该用PeekMessage代替吗?

你可以,是的。

如果是这样的话,我会有轮询代码,这不是我最喜欢的。我应该多久打一次电话给PeekMessage?PeekMessage又轻又快吗?

我建议创建一个专用线程,该线程创建自己的窗口,并使用GetMessage()作为消息循环。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24683332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档