如果拦截一个例如记事本创建的消息,必须注入其进程吗?
我想知道有没有另一种方法,我现在在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);然后我在运行程序后再打开一个记事本却没有任何反应
请问,我这程序出了什么问题
难道必须注入进程吗??望高手解答啊
我想知道有没有另一种方法,我现在在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);然后我在运行程序后再打开一个记事本却没有任何反应
请问,我这程序出了什么问题
难道必须注入进程吗??望高手解答啊
{
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);
}
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);
}