Deep BlueVBScriptWMIPHPC语言JavaScriptWindows API路由器Windows函数Python | VC6中使用高版本API的方法今天用VC6重新编译一个以前写过的程序。程序中使用了API函数SetWindowsHookEx,某段代码如下 SetWindowsHookEx(WH_KEYBOARD_LL,KeyHookProc,hInstance,0); Visual Studio 2008太大了我没有安装,只安装了Visual C++ 6.0和Microsoft Platform SDK February 2003。这个程序以前用VC9(即VC2008)编译没有任何问题,但是今天用VC6编译的时候竟然报错: error C2065: 'WH_KEYBOARD_LL' : undeclared identifier MSDN文档上说WH_KEYBOARD_LL要求系统必须至少为Windows NT/2000/XP,我的系统是Windows 2008 R2,怎么还会报错说未定义呢?百思不得其解。 文档说WH_KEYBOARD_LL Declared in Winuser.h,好吧,我就打开Winuser.h看了一下,终于找到了原因: #if (_WIN32_WINNT >= 0x0400) #define WH_KEYBOARD_LL 13 #define WH_MOUSE_LL 14 #endif // (_WIN32_WINNT >= 0x0400) 罪魁祸首就是这个_WIN32_WINNT,只有当它大于0x0400的时候才定义WH_KEYBOARD_LL。
查了一下MSDN文档,_WIN32_WINNT是用来定义操作系统版本的,各个版本操作系统对应的_WIN32_WINNT如下:
所以,只要在#include <windows.h>之前定义对应的_WIN32_WINNT就不会报错了。 参考链接:Using the Windows Headers |