一个MFC的扩展dll,用来hook键盘消息,一个对话框可以启动这个hook(全局的键盘hook),实验也确实可以在txt文件中正确的记录键盘输入
然后另外一个对话框程序也可以成功将某个dll注入到另外一个程序中,
但问题是,我想把这几个联合起来用,先把dll注入到程序,然后按一个键,也能hook这个按键,但这个时候就不行了。那么怎样能让注入到另外一个程序中的这个dll对我按的某个键有反应呢?请至少给个思路吧谢谢,我卡在这里几天无法前进,或者说我这个想法本就是错误的?希望各位高手说说
然后另外一个对话框程序也可以成功将某个dll注入到另外一个程序中,
但问题是,我想把这几个联合起来用,先把dll注入到程序,然后按一个键,也能hook这个按键,但这个时候就不行了。那么怎样能让注入到另外一个程序中的这个dll对我按的某个键有反应呢?请至少给个思路吧谢谢,我卡在这里几天无法前进,或者说我这个想法本就是错误的?希望各位高手说说
那么我实验的结果:DWORD hThread = GetWindowThreadProcessId(FindWindow("Windows Messenger", NULL ), NULL);//这种方式 返回是0DWORD hThread = GetCurrentProcessId();//曾经用这个做实验,有返回值,但是下面运行SetWindowsHookEx,返回值是0 //glhDLLHook来自于dllmain函数的第一个参数glhKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhDLLHook,hThread);请问如何做,才能成功的挂到msn上?我的本意是,不打算用全局钩子,用线程钩子,先试验hook线程成功,然后再来注入,再来hook注入的程序同时还问几个问题:
1.hook和注入是不是一定要分成2个程序写?
2.在cnzdgs老师的回帖说“Hook要使用MFC规则DLL,”可这样生成的程序里没有dllmain,那我如何得到SetWindowsHookEx函数的第三个参数??对于这个能说说由来么?
3.是不是要注入就一定要用dll?如果是,那么什么时候用的mfc的dll,什么时候用win32DLL(也就是在vc工程向导里选哪一种的问题),请讲解一下好么?我是新手,请多指教,谢谢,顺便说一句,我只是单纯研究下技术
你所说的hook和注入分别指什么?DLL可以是同一个。
HMODULE可以用GetModuleHandle或AfxGetInstanceHandle来获取。
注入不一定要用DLL,只是用DLL比较简单。注入的DLL应该尽量用Win32 DLL,如果要显示界面,用Win32比较费劲,可以用MFC规则DLL,如果被注入的是MFC程序,可以用MFC扩展DLL。
按下去之后调用 DWORD hProcId;
HWND gWnd = FindWindow(NULL,"aa.txt - Notepad"); //我这里用一个aa.txt做实验
DWORD hThread = GetWindowThreadProcessId(gWnd,&hProcId);
glhKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhDLLHook,hThread);返回都是成功的,但是当我在这个aa.txt上随便按几个键,可KeyboardProc里面的没有记录到任何东西,下断点调试,按任何一个键都没反应,不过改成全局钩子,就是正常的,并且能记录按下的键,不晓得问题出在哪里
glhKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentProcessId());但是glhKeyHook返回的是0