gpt4 book ai didi

c++ - DLL 中的 Windows 消息队列处理

转载 作者:可可西里 更新时间:2023-11-01 10:08:46 25 4
gpt4 key购买 nike

我有一个由应用程序加载的 dll,我无法修改应用程序的源代码(因为我没有源代码)并且我想使用插件注册一个系统范围的热键。我可以通过 RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_NOREPEAT, 0x42) 之类的方式注册热键(参见 here ),但我不确定应该如何处理消息队列,我应该一个新线程并在 dll 初始化时创建消息处理循环?接收消息的是我的 dll 还是加载 dll 的应用程序,最后还有更好的方法吗?

最佳答案

这是应该如何完成的:

  1. 你的 DLL 创建一个线程
  2. 此线程运行消息循环 (GetMessage()/DispatchMessage())——之类的事情。 GetMessage() 是您真正需要的,而如果您创建窗口则需要 DispatchMessage()(见下文)

现在应该发生以下两种情况之一:

  • 线程创建一个窗口(可能是隐藏的)并调用 RegisterHotKey() 函数(无论哪个线程调用它),窗口句柄作为第一个参数传递给它

  • 由 DLL 创建的线程调用 RegisterHotKey(),将 NULL 作为第一个参数传递。

完成所有这些之后,您的消息循环将收到 WM_HOTKEY 消息。这是执行此操作的官方和首选方式,所以不,如果您没有使用支持它的框架(大多数不支持),没有更好的方法来执行此操作。

完成后不要忘记调用 UnregisterHotKey() 并终止窗口和线程。

关于c++ - DLL 中的 Windows 消息队列处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6643516/

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