我正在用 C 编写一个 Win32 应用程序,并且一直在监视通过消息循环的窗口消息。我收到一条未知消息 0xc0e8,似乎找不到有关此特定消息的任何信息。据我了解,所有低于 0x400 (WM_USER) 的消息都由系统保留,所以我不明白如果我不发送任何自定义消息,为什么我会收到高于该整数的消息。
有谁知道这条消息以及它可能来自哪里?
我正在用 C 编写一个 Win32 应用程序,并且一直在监视通过消息循环的窗口消息。我收到一条未知消息 0xc0e8,似乎找不到有关此特定消息的任何信息。据我了解,所有低于 0x400 (WM_USER) 的消息都由系统保留,所以我不明白如果我不发送任何自定义消息,为什么我会收到高于该整数的消息。
有谁知道这条消息以及它可能来自哪里?
消息0xC0E8
属于应用程序定义的窗口消息范围,这些消息在运行时使用RegisterWindowMessage()
.
范围 | 意义 |
---|---|
0 到 WM_USER –1 | 保留供系统使用的消息。 |
WM_USER 到 0x7FFF | 供私有窗口类使用的整数消息。 |
WM_APP 通过 0xBFFF | 可供应用程序使用的消息。 |
0xC000 到 0xFFFF | 供应用程序使用的字符串消息。 |
大于 0xFFFF | 由系统保留。 |
您可以使用GlobalGetAtomName()
或GetClipboardFormatName()
检索注册的原始名称,这可能会让您知道哪个应用程序注册了它,因为许多应用程序倾向于将自己的名称放在他们注册的窗口消息中。但这不能保证。
并且无法确定最初是哪个应用程序进程实际注册了消息,或者正在将其发送到您的应用程序。1
1:嗯,不是没有在每个正在运行的进程中挂钩RegisterWindowMessage()
和(Post|Send)Message()
函数,也就是说。
不过,您不应该担心未知消息。在进程的生命周期中,您可能会收到许多未知消息。如果您收到一条您不认识的消息,只需将其传递给您的默认消息处理程序(DefWindowProc()
等)并继续。