我的代码在Windows XP上不起作用

因为Win-7拖放实现已经改变,为了使它工作,我需要使用ChangeWindowMessageFilter来启用一些东西。

有一个问题。 ChangeWindowMessageFilter自Vista以来是有效的,但是我也需要XP的解决scheme。

那么,你应该尝试动态调用它,因为你需要LoadLibrary和GetProcAddress 。


示例用法

 if (/*IsVista()*/) { typedef BOOL (WINAPI *ChangeMessageFilter)(UINT message, DWORD dwFlag); #define MSGFLT_ADD 1 #define MSGFLT_REMOVE 2 BOOL res = FALSE; HMODULE user32 = LoadLibrary(L"User32.dll"); if (user32 != NULL) { ChangeMessageFilter filter = (ChangeMessageFilter)::GetProcAddress(user32, "ChangeWindowMessageFilter"); if (filter != NULL) { res = filter(/*your value*/, MSGFLT_ADD); } ::FreeLibrary(user32); } } 

另一件事,你应该更好地使用ChangeWindowMessageFilterEx,因为它是使消息接收只有一个窗口,而不是所有的项目。