• 钓子程序代源


    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

  • 相关阅读:
    selenium又一小坑 无法用XPATH直接获取属性值 需要使用.get_attribute(“href”)
    seleium 之 EC 的用法
    用筛选法求100以内的素数(筛选法!!!)
    gets scanf getchar的用法
    P5728 【深基5.例5】旗鼓相当的对手
    访问那个地址上的变量 *
    素数表
    求素数
    求符合给定条件的整数集(c语言mooc 6.0 )
    C#理论学习
  • 原文地址:https://www.cnblogs.com/martian6125/p/9631578.html
Copyright © 2020-2023  润新知