zoukankan      html  css  js  c++  java
  • VC挂线程钩子的小经验

        挂线程钩子,最主要的是调用SetWindowsHookEx函数,使用例下:
    1. g_hHook = SetWindowsHookEx(
    2.   WH_SYSMSGFILTER | WH_MSGFILTER, //截获消息类型,可组合使用
    3.   (HOOKPROC)HookShowWindow, //消息回调函数
    4.   g_hInst, //消息回调函数所在模块的handle,因为是跨进程线程钩子,消息处理函数必须放到dll里面,故,这必须是dll的句柄。就因为这的错误,我折腾了几个小时。这个句柄可以在dllmain函数的hModule参数保存得到。
    5.   progID);//要挂钩子的线程ID
    其中, progID获取可如下:
    1. DWORD progID = GetWindowThreadProcessId(FindWindow("xvt320mditask100", NULL )->m_hWnd, NULL);
    g_hInst获取如下:

    1. HINSTANCE g_hInst;
    2. BOOL APIENTRY DllMain( HANDLE hModule, 
    3.                        DWORD  ul_reason_for_call, 
    4.                        LPVOID lpReserved
    5.       )
    6. {
    7.  switch(ul_reason_for_call)
    8.  {
    9.  case DLL_PROCESS_ATTACH:
    10.   g_hInst = HINSTANCE(hModule);
    11.   break;
    12.  case DLL_PROCESS_DETACH:
    13.   break;
    14.  case DLL_THREAD_ATTACH:
    15.   break;
    16.  case DLL_THREAD_DETACH:
    17.   break
    18.  }
    19.  return 1;
    20. }
    g_hHook是挂钩子成功后返回的钩子句柄,须保存起来后面解钩使用。
    UnhookWindowsHookEx(g_hHook);

    就这么简单!
  • 相关阅读:
    css选择器
    有关cookies与session的详细信息
    06OC之内存管理
    04OC之分类Category,协议Protocol,Copy,代码块block
    IOS学习目录
    03OC的类的补充
    02OC的类和对象
    02第一个OC程序
    01OC概述
    02快速学习ExtJs之---第一个HelloWord!
  • 原文地址:https://www.cnblogs.com/chuncn/p/1374115.html
Copyright © 2011-2022 走看看