2014-05-20 89 views
2

我正在写一个钩子DLL,它处理窗口绘制消息。
我发现Vista及以上版本,hook dll接收到一些未知的消息id,具体是0x90〜0x95。
我做了一些谷歌上搜索,发现了一个msdn linkthis,它告诉我,他们是什么样的信息:哪里可以找到窗口消息的定义WM_UAHDRAWMENUITEM(0x92)

#define WM_UAHDESTROYWINDOW 0x0090 
#define WM_UAHDRAWMENU 0x0091 
#define WM_UAHDRAWMENUITEM 0x0092 
#define WM_UAHINITMENU 0x0093 
#define WM_UAHMEASUREMENUITEM 0x0094 
#define WM_UAHNCPAINTMENUPOPUP 0x0095 

但我找不到任何头文件中的宏定义WM_UAHDRAWMENUITEM,编译器抱怨“未定义符号”。我对“WM_UAHDRAWMENUITEM”进行了全局搜索,但什么也没找到。

目前我使用0x92来处理此消息。
我的问题是:如何用Windows定义的宏很好地替换硬编码的0x92?

+2

通常,如果您无法找到Windows消息的文档,那么它们是不适合外部使用的内部Windows消息。即。使用需要您自担风险。 – user1793036

回答

1

如何用Windows定义的宏很好地替换硬编码的0x92?

显然,您安装的Win32 SDK版本没有宏,因此您不能使用它们。但是您的值为#define,因此只需将它们直接复制/粘贴到您自己的代码中即可。如果你愿意,你可以将它们包装在#ifdef中,这样如果你升级到原生的SDK版本,就会使用原生宏,否则编译器会继续使用你的手动宏。

#ifndef WM_UAHDRAWMENUITEM 
#define WM_UAHDRAWMENUITEM 0x0092 
#endif 
+0

我想我只是使用整数0x92,并留下评论。 – imafish