SetWindowsHookEx在当前进程设置键盘钩子
2015-04-19 12:01
288 查看
vs2010新建一个空的win32工程,工程设置在静态库中使用mfc
1.h//键入如下代码
1.cpp
1.h//键入如下代码
#ifndef MFCTEST_HEAD #define MFCTEST_HEAD #pragma once #include <afxwin.h> #include <afxframewndex.h> #define IDC_START 1012 //按钮定义 HHOOK g_KeyBoard=NULL; LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam); //键盘钩子函数定义 class CMyApp:public CWinApp { public: //构造函数 CMyApp(); //析构函数 virtual ~CMyApp(); //重载函数 public: //初始函数 virtual BOOL InitInstance(); }; class CMyWindow : public CFrameWndEx { public: //构造函数 CMyWindow(); //析构函数 virtual ~CMyWindow(); //虚函数 public: //命令响应消息 virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); //消息映射 public: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); DECLARE_MESSAGE_MAP() public: CButton m_button; //按钮 }; #endif
1.cpp
#include "1.h" CMyApp myapp; //构造函数 CMyApp::CMyApp() { } //析构函数 CMyApp::~CMyApp() { } //初始函数 BOOL CMyApp::InitInstance() { m_pMainWnd = new CMyWindow(); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; } //{{AFX_MSG_MAP(CFrameWndEx) BEGIN_MESSAGE_MAP(CMyWindow, CFrameWndEx) ON_WM_CREATE() END_MESSAGE_MAP() //构造函数 CMyWindow::CMyWindow() { Create(NULL, TEXT("My Window")); RECT rect={0,0,50,30}; m_button.Create(TEXT("按钮"),WS_CHILD|WS_VISIBLE,rect,this,IDC_START); } //析构函数 CMyWindow::~CMyWindow() { if (g_KeyBoard) { UnhookWindowsHookEx(g_KeyBoard); g_KeyBoard=NULL; } } //命令响应消息 BOOL CMyWindow::OnCommand( WPARAM wParam, LPARAM lParam ) { int wmId=LOWORD(wParam); switch (wmId) { case IDC_START: { MessageBox(TEXT("测试一下哈"),TEXT("提示"),MB_OK); return true; } break; default: return true; } return __super::OnCommand(wParam,lParam); } //创建事件 int CMyWindow::OnCreate( LPCREATESTRUCT lpCreateStruct ) { __super::OnCreate(lpCreateStruct); g_KeyBoard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId()); if (g_KeyBoard==NULL) { ASSERT(FALSE); AfxMessageBox(TEXT("设置钩子失败")); } return true; } //键盘钩子 LRESULT CALLBACK KeyboardProc( int code,WPARAM wParam,LPARAM lParam ) { if (VK_F2==wParam && (lParam>>31&1)==1) { AfxMessageBox(TEXT("我是你的大皇冠")); return true; } else return CallNextHookEx(g_KeyBoard,code,wParam,lParam); ASSERT(FALSE); return false; }
相关文章推荐
- SetWindowsHookEx设置全局键盘钩子
- WinAPI——SetWindowsHookEx设置钩子说明
- SetWindowsHookEx原理(如何使用钩子,使用钩子hook其他进程的函数)
- WinAPI: SetWindowsHookEx - 设置钩子
- WinAPI: SetWindowsHookEx - 设置钩子
- 使用SetWindowsHookEx(WH_KEYBOARD,...)制作全局键盘钩子
- WinAPI: SetWindowsHookEx - 设置钩子
- WinAPI: SetWindowsHookEx - 设置钩子
- SetWindowsHookEx设置全局钩子
- SetWindowsHookEx为某个进程安装钩子
- WinAPI: SetWindowsHookEx - 设置钩子 / UnhookWindowsHookEx - 卸掉钩子
- WinAPI: SetWindowsHookEx - 设置…
- SetWindowsHookEx钩子详解
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
- SetWindowsHookEx 钩子
- 关于HOOK,如何通过钩子截获指定窗口的所有消息 SetWindowsHookEx demo
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
- 全局钩子函数之 SetWindowsHookEx
- 关于SetWindowsHookEx【HOOK钩子】
- WinAPI: SetWindowsHookEx - 设置钩