我的代码在Windows XP上无法运行

问题描述:

因为Win-7的拖放实施已经改变,为了使它工作我需要启用一些使用ChangeWindowMessageFilter的东西。我的代码在Windows XP上无法运行

存在问题。 ChangeWindowMessageFilter自Vista以来是有效的,但是我也需要XP的解决方案。

那么,你应该尝试动态调用它,因为你需要LoadLibraryGetProcAddress


使用范例

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,因为它是能够接受的只有一个窗口,并不是所有的项目信息。

+0

这个效果很好。 – user3494350

+0

“ChangeWindowMessageFilter”有什么问题? – user3494350

+0

['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 +)改为将改变应用于特定的窗口。 –