本文主要是介绍Win8管理员启动的程序不响应拖拽消息的处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先,这是一个权限问题,简单理解低权限的拖拽被管理员权限的程序拒绝了~~~所以我们需要告诉这个以管理员权限启动的进程,我们需要这个消息,即使是它来自较低权限的消息,系统Api为我们提供了解决办法~~一个过滤消息的API,(微软Vista系统之后的版本有的API)
BOOL WINAPI ChangeWindowMessageFilterEx(
__in HWND hWnd,
__in UINT message,
__in DWORD action,
__inout_opt PCHANGEFILTERSTRUCT pChangeFilterStruct
);
参数编辑
指向CHANGEFILTERSTRUCT结构指针的可选项。
百度在这里解释的很清楚,所以我就直接拷贝过来了,但是,当我去试图用这个APi过滤拖拽的时候,并没有起到应该有的效果,原来,要过滤这个拖拽消息,需要同时过滤包括拖拽消息在内的3个消息分别是:
WM_DROPFILES
WM_COPYDATA
0x0049
同时过滤这三个消息才能达到我们需要的效果,而且,需要注意的是,这个API需要我们动态的加载如:
1.在头文件内申明一个函数指针
typedef BOOL (WINAPI *LPFUNC)(HWND,UINT,DWORD,PCHANGEFILTERSTRUCT);
2.在需要过滤的敌法加载模块(这个函数在模块user32.dll内),并且找到函数在模块内的地址
HMODULE hLib = ::LoadLibraryA("user32.dll");if (hLib){LPFUNC func = (LPFUNC)GetProcAddress(hLib, "ChangeWindowMessageFilterEx");if (func){func(HWND,WM_DROPFILES, 1,NULL);func(HWND,WM_COPYDATA, 1,NULL);func(pFrame->GetHWND(),0x0049, 1,NULL);}}
至此,我们高权限的进程窗口也能接受较低权限的消息了
这篇关于Win8管理员启动的程序不响应拖拽消息的处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!