如果拦截一个例如记事本创建的消息,必须注入其进程吗?
我想知道有没有另一种方法,我现在在DLL中想勾取记事本创建的消息
在钩子回调函数中LRESULT  CALLBACK CNotepadProc(int code,WPARAM wparam,LPARAM lparam)
{
PMSG pmsg = (PMSG)lparam;
hNotepadWnd=::FindWindow( "Edit",NULL);  //其中hNotepadWnd=NULL;是共享数据段
if(code == HCBT_CREATEWND && hNotepadWnd!=NULL )
{
    if(!first)
    {
MessageBox(0,"创建记事本","提示",MB_OK);
first = true;
    }
}
return   ::CallNextHookEx(g_hHook,code,wparam,lparam);   
}安装钩子的代码g_hHook = ::SetWindowsHookEx(WH_CBT,(HOOKPROC)CNotepadProc,
GetModuleHandle("myDll"),0);然后我在运行程序后再打开一个记事本却没有任何反应
请问,我这程序出了什么问题
难道必须注入进程吗??望高手解答啊

解决方案 »

  1.   

    LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if (nCode == HCBT_CREATEWND)
    {
    TCHAR name[100];
    GetClassName((HWND)wParam, name, 100);
    if (lstrcmpi(name, _T("Notepad")) == 0)
    MessageBox(0, _T("创建记事本"), _T("提示"), MB_OK);
    }
    return CallNextHookEx(NextHook, g_hHook, wParam, lParam);
    }
      

  2.   

    贴错了,更正一下:
    LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if (nCode == HCBT_CREATEWND)
    {
    TCHAR name[100];
    GetClassName((HWND)wParam, name, 100);
    if (lstrcmpi(name, _T("Notepad")) == 0)
    MessageBox(0, _T("创建记事本"), _T("提示"), MB_OK);
    }
    return CallNextHookEx(g_hHook, nCode, wParam, lParam);
    }