字体
第(3/5)页
关灯
   存书签 书架管理 返回目录
 return 1; // ok

    }

    这个函数最重要的部分是调用AfxInitExtensionModule(),它初始化DLL 并在MFC 框架

    中正确地工作。它需要传递给DllMain()的DLL 实例句柄和AFX_EXTENSION_MODULE 结

    构,结构中存在着对MFC 有用的信息。

    加载和卸载鼠标全局钩子的函数接口定义如下:

    BOOL __stdcall StartHook(HWND hWnd)

    { //install hoook

    hMouseHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,glhInstance,0);

    //mouse hook

    if(hMouseHook)

    {

    glhDisplayWnd=hWnd; //设置显示目标窗口标题编辑框的句柄

    return TRUE;

    }

    return FALSE;

    }

    BOOL __stdcall StopHook()

    { //unstall hook

    BOOL mHook=UnhookWindowsHookEx(hMouseHook);

    if(mHook)

    return TRUE;

    return FALSE;

    }

    钩子函数的具体实现代码如下:

    LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam)

    {

    LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *) lparam;

    if (nCode>=0)

    {

    HWND glhTargetWnd=pMouseHook->hwnd; //取目标窗口句柄

    HWND ParentWnd=glhTargetWnd;

    while (ParentWnd !=NULL)

    {

    glhTargetWnd=ParentWnd;

    ParentWnd=GetParent(glhTargetWnd); //取应用程序主窗口句柄

    }

    枫叶文学网www.fywxw.com

    第10 章 动态链接库

    ·277·

    if(glhTargetWnd!=glhPrevTarWnd)

    {

    char szCaption[100];

    GetWindowText(glhTargetWnd,szCaption,100); //取目标窗口标题

    if(IsWindow(glhDisplayWnd))

    SendMessage(glhDisplayWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption);

    glhPrevTarWnd=glhTargetWnd; //保存目标窗口

    }

    }

    return CallNextHookEx(g
上一页 目录 下一页