vc6程序拖拽文件WM_DROPFILE在win7,win8,vista上不能响应的解决方法,我用到了为了防止忘记
#define WM_COPYGLOBALDATA 0x0049
typedef WINUSERAPI BOOL WINAPI CHANGEWINDOWMESSAGEFILTER(UINT message, DWORD dwFlag);void ChangeMessageProi()
{
HINSTANCE hDllInst = LoadLibrary(_T("user32.dll"));
if (hDllInst)
{
CHANGEWINDOWMESSAGEFILTER *pAddMessageFilterFunc = (CHANGEWINDOWMESSAGEFILTER *)GetProcAddress(hDllInst, "ChangeWindowMessageFilter");
if (pAddMessageFilterFunc)
{
pAddMessageFilterFunc(WM_DROPFILES, 1); //MSGFLT_ADD: 1, MSGFLT_REMOVE: 2
pAddMessageFilterFunc(WM_COPYDATA, 1);
pAddMessageFilterFunc(0x0049, 1);
}
FreeLibrary(hDllInst);
}
}
然后在代码中调用ChangeMessageProi() ;之后就正常了,问题源于win7等系统的权限限制
本文介绍了解决VC6环境下,在Win7、Win8及Vista系统中拖拽文件时WM_DROPFILES消息无法响应的问题。通过加载user32.dll并调用ChangeWindowMessageFilter函数,允许特定的消息类型,如WM_DROPFILES、WM_COPYDATA和自定义消息WM_COPYGLOBALDATA,以此绕过操作系统的权限限制。
1万+

被折叠的 条评论
为什么被折叠?



