Win32 应用程序中的神秘 Window 消息 0xc0e8

Mysterious Window Message 0xc0e8 in Win32 Application

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

是否有人知道此消息及其来源?

消息 0xC0E8 在运行时使用 RegisterWindowMessage().

注册的应用程序定义的 window 消息范围内
Range Meaning
0 through WM_USER –1 Messages reserved for use by the system.
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by the system.

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

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

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

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