我的代码在Windows XP上无法运行
问题描述:
因为Win-7的拖放实施已经改变,为了使它工作我需要启用一些使用ChangeWindowMessageFilter的东西。我的代码在Windows XP上无法运行
存在问题。 ChangeWindowMessageFilter
自Vista以来是有效的,但是我也需要XP的解决方案。
答
那么,你应该尝试动态调用它,因为你需要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,因为它是能够接受的只有一个窗口,并不是所有的项目信息。
这个效果很好。 – user3494350
“ChangeWindowMessageFilter”有什么问题? – user3494350
['ChangeWindowMessageFilter()'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms632675.aspx)(Vista +)将更改应用于整个进程。 ['ChangeWindowMessageFilterEx()'](http://msdn.microsoft.com/en-us/library/windows/desktop/dd388202.aspx)(Win7 +)改为将改变应用于特定的窗口。 –