鱼C论坛

 找回密码
 立即注册
查看: 2037|回复: 2

[技术交流] C语言,截取键盘和鼠标消息,无DLL! 50行代码,直接可编译运行

[复制链接]
发表于 2015-5-4 11:17:59 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 凌风破浪 于 2015-5-4 11:19 编辑

好多年以前写的一段小代码,很简单,是吧

  1. #include <stdio.h>

  2. #include <windows.h>


  3. HHOOK Mouse = 0;
  4. HHOOK KeyBoard = 0;

  5. LRESULT CALLBACK KeyProc( int code, WPARAM w, LPARAM l )
  6. {
  7.         //简单打印
  8.         printf( "%x\n", code );
  9.         printf( ( w == WM_KEYDOWN ) ? "按下%c\n" : "抬起%c\n", ( (PKBDLLHOOKSTRUCT)l )->vkCode );
  10.         printf( "%x,%x,%x,%x\n", ( (PKBDLLHOOKSTRUCT)l )->dwExtraInfo, ( (PKBDLLHOOKSTRUCT)l )->flags, ( (PKBDLLHOOKSTRUCT)l )->scanCode, ( (PKBDLLHOOKSTRUCT)l )->time );

  11.         return CallNextHookEx( KeyBoard, code, w, l );
  12. }

  13. LRESULT CALLBACK MouseProc( int code, WPARAM w, LPARAM l )
  14. {
  15.         //简单打印
  16.         if( w == WM_LBUTTONDOWN ) printf( "按下左键\t" );
  17.         else if( w == WM_LBUTTONUP ) printf( "抬起左键\t" );
  18.         else if( w == WM_RBUTTONDOWN ) printf( "按下右键\t" );
  19.         else if( w == WM_RBUTTONUP ) printf( "抬起右键\t" );
  20.         else if( w == WM_MOUSEMOVE ) printf( "鼠标移动\t" );
  21.         else printf( "未知按键\t" );
  22.         printf( "x:%d\ty:%d\n", ( (PMSLLHOOKSTRUCT)l )->pt.x, ( (PMSLLHOOKSTRUCT)l )->pt.y );

  23.         return CallNextHookEx( Mouse, code, w, l );
  24. }
  25. int main( void )
  26. {
  27.         //注册钩子
  28.         KeyBoard = SetWindowsHookEx( WH_KEYBOARD_LL, KeyProc, GetModuleHandle( NULL ), 0 );
  29.         Mouse = SetWindowsHookEx( WH_MOUSE_LL, MouseProc, GetModuleHandle( NULL ), 0 );

  30.         if( KeyBoard == NULL || Mouse == NULL )
  31.         {
  32.                 printf( "安装钩子出错\n" );
  33.                 return 0;
  34.         };

  35.         //以下是WINDOWS循环,用来更新显示的,不用管它
  36.         MSG msg;
  37.         while( GetMessage( &msg, NULL, 0, 0 ) )
  38.         {
  39.                 TranslateMessage( &msg );
  40.                 DispatchMessage( &msg );
  41.         };

  42.         //注销钩子
  43.         UnhookWindowsHookEx( KeyBoard );
  44.         UnhookWindowsHookEx( Mouse );
  45.         return 0;
  46. };
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-31 09:42:06 | 显示全部楼层
太秀了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 12:31:06 | 显示全部楼层
我用 DEV_C++ 运行没有问题,用 VC++6.0 运行,出现 13条错误,我增加了一句 #include "keyhook.h" 后,还有一条错误:fatal error C1083: Cannot open include file: 'keyhook.h': No such file or directory ,不知道怎么处理了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 07:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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