获取RegisterWindowMessage注册的消息名称

sch*_*her 5 sendmessage windows-messages

我正在调试一个旧的应用程序,其中 WndProc 被覆盖。我收到一条 ID=0xC1B0 的消息,这意味着根据这篇msdn 文章,这是一条系统范围内的唯一消息。

正如 microsoft 所描述的RegisterWindowMessage(...),相同的字符串参数会产生相同的消息 ID。因此,message-id 和参数之间存在唯一的链接。

我现在的问题是:如果我有消息 ID,是否有可能获取参数?如果是,这可能会帮助我找到消息的来源。

sch*_*her 3

正如本博客中所发现的,没有直接的方法,但该函数GetClipboardFormatName(...)提供了解决该问题的方法。

我按以下方式使用它:

[DllImport("user32.dll")]
static extern int GetClipboardFormatName(int format, StringBuilder lpszFormatName, int cchMaxCount);

public static string GetMessageName(int msg)
{
    var sb = new StringBuilder(256);
    GetClipboardFormatName(msg, sb, sb.Capacity);
    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)