本文实例讲述了C++键盘记录程序。分享给大家供大家参考。具体分析如下:主程序如下:就是基于对话框的框架,加个个OnHookKey函数,代码如下:long CMainDialog::OnHookKey(WPARAM wParam, LPARAM lParam) //处理自定义消息 { char szKey[80]={0}; GetKeyNameText(lParam, szKey, 80); CString strItem; strItem.Format("按键:%srn", szKey); CString strEdit; GetDlgItem(IDC_KEYMSG)->GetWindowText(strEdit); GetDlgItem(IDC_KEYMSG)->SetWindowTextA(strEdit+strItem); ::MessageBeep(MB_OK); return 0; }在初始化时,调用DLL中的:代码如下:SetKeyHook(TRUE, 0, m_hWnd)在析构时,调用DLL中的:代码如下:SetKeyHook(FALSE);.cpp源文件代码:代码如下:#include <afxwin.h> #define HM_KEY WM_USER+100 //CMyApp class CMyApp:public CWinApp { public: BOOL InitInstance(); }; //CMyDialog class CMainDialog:public CDialog { public: CMainDialog(CWnd* pParentWnd = NULL); protected: virtual BOOL OnInitDialog( ); afx_msg void OnCancel(); afx_msg long OnHookKey(WPARAM wParam, LPARAM lParam); //处理自定义消息的声明 DECLARE_MESSAGE_MAP() };.h头文件代码:代码如下:#include "resource.h" #include "KeyHookApp.h" #include "KeyHook.h" #pragma comment(lib,"KeyHook.lib") CMyApp theApp; BOOL CMyApp::InitInstance() { CMainDialog dlg; m_pMainWnd = &dlg; //给m_pMainWnd 主窗口 dlg.DoModal(); return FALSE; //不进入消息循环 } BEGIN_MESSAGE_MAP(CMainDialog, CDialog) ON_MESSAGE(HM_KEY, OnHookKey) //自定义消息 END_MESSAGE_MAP() //CMainDialog CMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAIN, pParentWnd) { } BOOL CMainDialog::OnInitDialog( ) { CDialog::OnInitDialog(); if (!SetKeyHook(TRUE, 0, m_hWnd)) { MessageBox("安装钩子失败"); } return TRUE; } //处理关闭消息 void CMainDialog::OnCancel() { OutputDebugString("oncancel"); SetKeyHook(FALSE); CDialog::OnCancel(); return; } long CMainDialog::OnHookKey(WPARAM wParam, LPARAM lParam) //处理自定义消息 { char szKey[80]={0}; GetKeyNameText(lParam, szKey, 80); CString strItem; strItem.Format("按键:%srn", szKey); CString strEdit; GetDlgItem(IDC_KEYMSG)->GetWindowText(strEdit); GetDlgItem(IDC_KEYMSG)->SetWindowTextA(strEdit+strItem); ::MessageBeep(MB_OK); return 0; }dll的代码:.cpp源文件代码:代码如下:// KeyHook.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" #include "KeyHook.h" //共享数据段 #pragma data_seg("YCIShared") HWND g_hWndCaller=NULL; //保存主窗口句柄 HHOOK g_hHook = NULL; //保存钩子句柄 #pragma data_seg() // 这是导出变量的一个示例 KEYHOOK_API int nKeyHook=0; // 这是导出函数的一个示例。 KEYHOOK_API int fnKeyHook(void) { return 42; } //通过内存得到模块句柄的帮助函数 HMODULE WINAPI ModuleFromAddress(LPVOID pv) { MEMORY_BASIC_INFORMATION mbi; if (0 != ::VirtualQuery(pv, &mbi, sizeof(MEMORY_BASIC_INFORMATION))) { return (HMODULE)mbi.AllocationBase; } else { return NULL; } } //钩子处理函数 LRESULT CALLBACK KeyboardProc( __in int code, __in WPARAM wParam, __in LPARAM lParam ) { if (code<0||code==HC_NOREM) { return ::CallNextHookEx(g_hHook, code, wParam,lParam); } //如果重复消息,交给下一链 if (lParam & 0x40000000) { return ::CallNextHookEx(g_hHook, code, wParam,lParam); } //通知主窗口 ::PostMessageA(g_hWndCaller, HM_KEY, wParam, lParam); return ::CallNextHookEx(g_hHook, code, wParam,lParam); } //安装和卸载钩子函数 BOOL KEYHOOK_API WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId, HWND hWndCaller) { BOOL bRet = TRUE; g_hWndCaller = hWndCaller; if (bInstall) //安装钩子 { g_hHook =::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, ModuleFromAddress(KeyboardProc), dwThreadId); bRet = (g_hHook != NULL); } else //卸载钩子 { ::UnhookWindowsHookEx(g_hHook); g_hHook = NULL; } return bRet; } // 这是已导出类的构造函数。 // 有关类定义的信息,请参阅 KeyHook.h CKeyHook::CKeyHook() { return; }.h头文件代码:代码如下:// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 KEYHOOK_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // KEYHOOK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifdef KEYHOOK_EXPORTS #define KEYHOOK_API __declspec(dllexport) #else #define KEYHOOK_API __declspec(dllimport) #endif #define HM_KEY WM_USER + 100 // 此类是从 KeyHook.dll 导出的 class KEYHOOK_API CKeyHook { public: CKeyHook(void); // TODO: 在此添加您的方法。 }; extern KEYHOOK_API int nKeyHook; KEYHOOK_API int fnKeyHook(void); //声明要导出的 BOOL KEYHOOK_API WINAPI SetKeyHook(BOOL bInstall, DWORD dwThreadId=0, HWND hWndCaller=NULL);.def代码:代码如下:EXPORTS SetKeyHook SECTIONS YCIShared Read Write Shared希望本文所述对大家的C++程序设计有所帮助。
导读:目前正在解读《C++键盘记录程序代码,值得一看》的相关信息,《C++键盘记录程序代码,值得一看》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C++键盘记录程序代码,值得一看》的详细说明。
简介:这篇文章主要介绍了C++键盘记录程序代码,是Windows应用程序开发中非常实用的功能,该功能也常被一些远程操控程序所实用,需要的朋友可以参考下。
提醒:《C++键盘记录程序代码,值得一看》最后刷新时间 2024-03-14 01:05:04,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C++键盘记录程序代码,值得一看》该内容的真实性请自行鉴别。