gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:38:57 26 4
gpt4 key购买 nike

我正在尝试在 Java 代码中接收 WM_HOTKEY 事件。我已经成功地使一些一次性代码正常工作,但我知道将 Java GUI 代码与 Windows 消息循环集成需要谨慎。

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

所以...我想知道:

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

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

最佳答案

Have I understood correctly that RegisterHotKey and my message loop must be running on the same Java thread?

是的。 RegisterHotKey() documentation 中提到了这一点:

This function cannot associate a hot key with a window created by another thread

<小时/>

Have I understood correctly that Windows' GetMessage function must be called from the same thread that I use to create Windows, which is Java Swing's Event Dispatch Thread?

是的。窗口由创建它的线程拥有,并且只有拥有该窗口的线程才能接收该窗口的消息。

<小时/>

If so, I can't create a message loop on the Event Dispatch Thread, as it would block other events. Should I use PeekMessage instead?

你可以,是的。

<小时/>

If so, I would have polling code, which is not my favourite. How often should I call PeekMessage? Is PeekMessage light and fast?

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

关于java - 在使用 JNA 的 Java 代码中使用 GetMessage 或 PeekMessage 的安全方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24683332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com