鱼C论坛

 找回密码
 立即注册
查看: 1800|回复: 0

[技术交流] SDK-简单的HOOK一下

[复制链接]
发表于 2015-11-11 20:54:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ebloke 于 2015-11-11 20:57 编辑

新手学习~请多关照,不足多多指出~

psb.png



  • #include "stdafx.h"
  • LRESULT CALLBACK MyWndProc(HWND,UINT,WPARAM,LPARAM);
  • int APIENTRY WinMain(HINSTANCE hInstance,
  •                      HINSTANCE hPrevInstance,
  •                      LPSTR     lpCmdLine,
  •                      int       nCmdShow)
  • {
  •          // TODO: Place code here.
  •         const char  *szTitle = "SDK-简单HOOK程序";
  •         const char *szWindowClass = "MyWindowClass";
  •         MSG msg;
  •         WNDCLASSEX wcs;
  •         wcs.cbSize = sizeof(WNDCLASSEX);
  •         wcs.style = CS_HREDRAW|CS_VREDRAW;
  •         wcs.lpfnWndProc = (WNDPROC)MyWndProc;
  •         wcs.cbClsExtra = 0;
  •         wcs.cbWndExtra = 0;
  •         wcs.hInstance =hInstance;
  •         wcs.hIcon = LoadIcon(NULL,IDI_APPLICATION);
  •         wcs.hCursor = LoadCursor(NULL,IDC_CROSS);
  •         wcs.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
  •         wcs.lpszClassName = szWindowClass;
  •         wcs.lpszMenuName = NULL;
  •         wcs.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
  •         RegisterClassEx(&wcs);
  •         HWND hwnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
  •                                                             CW_USEDEFAULT,0,300,200,NULL,NULL,hInstance,NULL);
  •         if (!hwnd)
  •         {
  •                 return FALSE;
  •         }
  •         ShowWindow(hwnd,nCmdShow);
  •         UpdateWindow(hwnd);
  •         while (GetMessage(&msg,NULL,0,0))
  •         {
  •                 TranslateMessage(&msg);
  •                 DispatchMessage(&msg);
  •         }
  •         return msg.wParam;
  • }
  • HHOOK g_hKeyHook = NULL;//保存钩子句柄
  • LRESULT CALLBACK MyKeyBoardProc(int code, WPARAM wParam, LPARAM lParam)
  • {
  •         char buf[2]={0};
  •         buf[0] = (char)wParam;
  •         if (lParam>>31 == 0)
  •         {
  •                 ::MessageBox(NULL,buf,"钩子过程:您按下了", MB_ICONINFORMATION);
  •         }else
  •         {
  •                 ::MessageBox(NULL,buf,"钩子过程:您松开了",MB_ICONINFORMATION);
  •         }
  •         return ::CallNextHookEx(g_hKeyHook,code,wParam,lParam); //传递给下一个HOOK处理
  • }
  • LRESULT CALLBACK MyWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  • {
  •         char buf[2]={0}; //定义一个缓冲区接收字符输入
  •         switch (message)
  •         {
  •         case WM_CREATE:
  •                 //创建窗口完毕后安装钩子。 GetCurrentThreadId获取当前线程一个唯一的线程标识符
  •                 g_hKeyHook = SetWindowsHookEx(WH_KEYBOARD, MyKeyBoardProc,NULL,::GetCurrentThreadId());
  •                 break;
  •         case WM_CHAR: //窗口过程接收的消息
  •                 buf[0]=(char)wParam;
  •                 if (lParam>>31 == 0)
  •                 {
  •                         ::MessageBox(NULL,buf,"窗口过程:您按下了",MB_ICONINFORMATION);
  •                 }else
  •                 {
  •                         ::MessageBox(NULL,buf,"窗口过程:您松开了",MB_ICONINFORMATION);
  •                 }
  •                 break;
  •         case WM_DESTROY:
  •                 ::UnhookWindowsHookEx(g_hKeyHook); //关闭钩子
  •                 PostQuitMessage(0);
  •                 break;
  •         default:
  •                 return DefWindowProc(hwnd,message,wParam,lParam);
  •         }
  •         return 0;
  • }

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
拈花小仙 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表