怎样用后台程序记录前台程序中的键盘输入

解决方案 »

  1.   

    在www.playicq.com的源码里有一个示例
      

  2.   

    BCB的源码要不要?但改到Delphi来很麻烦~如果你要,发留言给我。
      

  3.   

    EventLog: Integer;
      PlayLog: Integer;
      hHook, hPlay: Integer;
      recOK: Integer;
      canPlay: Integer;
      bDelay: Bool;
      const RSP_SIMPLE_SERVICE=1;
    // PlayProc是消息回放函数,当系统可以执行消息回放
    //时调用该函数,程序就将先前记录的消息值返回到lParam指向的区域中,
    //系统就会执行该消息,从而实现了消息回放。function PlayProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
    begin
      canPlay := 1;
      Result := 0;  if iCode < 0 then //必须将消息传递到消息链的下一个接收单元
        Result := CallNextHookEx(hPlay, iCode, wParam, lParam)
      else if iCode = HC_SYSMODALON then
        canPlay := 0
      else if iCode = HC_SYSMODALOFF then
        canPlay := 1
      else if ((canPlay = 1) and (iCode = HC_GETNEXT)) then begin
        if bDelay then begin
          bDelay := False;
          Result := 50;
        end;
        pEventMSG(lParam)^ := EventArr[PlayLog];
      end
      else if ((canPlay = 1) and (iCode = HC_SKIP)) then begin
        bDelay := True;
        PlayLog := PlayLog + 1;
      end;
      if PlayLog >= EventLog then begin
        UNHookWindowsHookEx(hPlay);
      end;
    end;
    //HookProc是记录操作的消息函数,每当有鼠标键盘消息发生时,系统都会调用该函数,消息信
    //息就保存在地址lParam中,我们可以把消息保存在一个数组中。function HookProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
    begin
      recOK := 1;
      Result := 0;
      if iCode < 0 then
        Result := CallNextHookEx(hHook, iCode, wParam, lParam)
      else if iCode = HC_SYSMODALON then
        recOK := 0
      else if iCode = HC_SYSMODALOFF then
        recOK := 1
      else if ((recOK > 0) and (iCode = HC_ACTION)) then begin
        EventArr[EventLog] := pEventMSG(lParam)^;
        EventLog := EventLog + 1;
        if EventLog >= 1000 then begin
          UnHookWindowsHookEx(hHook);
        end;
      end;
    end;