win7下由于UIPI的限制, 高权限进程无法收到底权限进程发来的消息, 因此对窗口消息hook时无法接收到消息,解决办法是在调用SetWindowsHookEx之前先调用ChangeWindowMessageFilterEx, 该函数修改指定窗口的UIPI消息过滤设置。 原型如下:
BOOL WINAPI
ChangeWindowMessageFilterEx( HWND
hWnd, UINT
message, DWORD
action, PCHANGEFILTERSTRUCT
pChangeFilterStruct);第一个参数要改变设置的窗口句构, 第二个参数要过滤的消息, 第三个参数要执行的动作,
第四个参数指向一个CHANGEFILTERESTRUCT结构。该结构用于返回修改结果。
另外ChangeWindowMessageFilterEx在需要从user32中导出, 如下:BOOL
CallChangeWindowMessageFilter(HWND hWnd, UINT nMsg, DWORD dwAction,
PCHANGEFILTERSTRUCT chfit)
{
typedef BOOL (WINAPI *LPFUNC)(HWND,
UINT, DWORD, PCHANGEFILTERSTRUCT);
HMODULE hLib = LoadLibraryA("user32.dll");
if (hLib)
{
LPFUNC func =
(LPFUNC)GetProcAddress(hLib,
"ChangeWindowMessageFilterEx");
if (func
&& chfit)
return func(hWnd, nMsg, dwAction,
chfit);
}
return FALSE;
}如果要设置一个窗口消息构子可以这样调:CHANGEFILTERSTRUCT chfit = {
sizeof(CHANGEFILTERSTRUCT) };
CallChangeWindowMessageFilter(hWnd,
WM_COPYDATA, MSGFLT_ALLOW, &chfit);g_hhookCBTMsg = SetWindowsHookExW(WH_CBT
,CBTProc, hDLL, 0);这样你的进程就可以获取来自底权限进程的消息。
win7下不能收到窗口hook消息的问题,布布扣,bubuko.com
原文:http://www.cnblogs.com/lidabo/p/3586160.html