zoukankan      html  css  js  c++  java
  • win7下不能收到窗口hook消息的问题

    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);这样你的进程就可以获取来自底权限进程的消息。

  • 相关阅读:
    基于jquery实现的文字淡入淡出效果
    js截取小数点后几位的写法
    JS获取IP、MAC和主机名的五种方法
    php checkbox复选框值的获取与checkbox默认值输出方法
    php验证复选框有效性的示例
    【Trapping Rain Water】cpp
    【Valid Sudoku】cpp
    【Permutation Sequence】cpp
    【Next Permutation】cpp
    【Remove Elements】cpp
  • 原文地址:https://www.cnblogs.com/lidabo/p/3586160.html
Copyright © 2011-2022 走看看