0

我正在用 C 编写一个 Win32 应用程序,并且一直在监视通过消息循环的窗口消息。我收到一条未知消息 0xc0e8,似乎找不到有关此特定消息的任何信息。据我了解,所有低于 0x400 (WM_USER) 的消息都由系统保留,所以我不明白如果我不发送任何自定义消息,为什么我会收到高于该整数的消息。

有谁知道这条消息以及它可能来自哪里?

4

1 回答 1

2

消息0xC0E8属于应用程序定义的窗口消息范围,这些消息在运行时使用RegisterWindowMessage().

范围 意义
0 到 WM_USER –1 保留供系统使用的消息。
WM_USER 到 0x7FFF 供私有窗口类使用的整数消息。
WM_APP 通过 0xBFFF 可供应用程序使用的消息。
0xC000 到 0xFFFF 供应用程序使用的字符串消息。
大于 0xFFFF 由系统保留。

您可以使用GlobalGetAtomName()GetClipboardFormatName()检索注册的原始名称,这可能会让您知道哪个应用程序注册了它,因为许多应用程序倾向于将自己的名称放在他们注册的窗口消息中。但这不能保证。

并且无法确定最初是哪个应用程序进程实际注册了消息,或者正在将其发送到您的应用程序。1

1:嗯,不是没有在每个正在运行的进程中挂钩RegisterWindowMessage()(Post|Send)Message()函数,也就是说。

不过,您不应该担心未知消息。在进程的生命周期中,您可能会收到许多未知消息。如果您收到一条您不认识的消息,只需将其传递给您的默认消息处理程序(DefWindowProc()等)并继续。

于 2021-07-26T17:53:47.043 回答