怎样用后台程序记录前台程序中的键盘输入
解决方案 »
- 关于数据库的!初学者提问
- 请问:怎样在Delphi中打印一个bmp文件
- 被逼放分,阿门
- 有关delphi 窗体 foucs 设置的问题,高手来帮帮~~!
- 发现连接远程SQL时windows默认是用命名管道,而不用TCP,导致连接不成功,如何修改为默认tcp/ip连接呢
- 程序莫名其妙的退出?不提示任何错误.
- 利用TclientDataSet写入Blob字段的方法!深入研究,高分!
- 请高手过来!!!:如何在Delphi中根据PID来结束系统线程
- CSDN怎么了,慢得象蜗牛!真伤心!!!!!!!!!!!!!!
- 关于JCL,如何设置编辑命令?如何在它机正常显示StackList。
- 第三方控件!!
- =====为有鬼兄祝贺=====
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;