关于hook的问题,解决200分全给!

oioioi-090 2004-08-16 05:30:00
其实我要实现的功能也很简单,就是监控客户端电脑是否使用,如果隔一段时间不碰键盘鼠标(就跟屏保一样),就将结束时间发送给服务器,然后就可以减去开始使用时间来算得客户端实际使用电脑时间!
现在就是不知如何发送监控到的数据!(写到本地txt可以但怎么发送,不可能让用户自己发吧)

希望大家帮忙解决!
http://community.csdn.net/Expert/topic/3279/3279641.xml?temp=.9909784的分一起给了!
...全文
273 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fei19790920 2004-08-17
  • 打赏
  • 举报
回复
昨晚有事忘记了,不好意思

现在发了,请查收
D_J 2004-08-17
  • 打赏
  • 举报
回复
顶!
学习...
KevinXXXX 2004-08-17
  • 打赏
  • 举报
回复
监视一下主消息循环不就行了,有必要动用hook吗?
zizzzz 2004-08-17
  • 打赏
  • 举报
回复
试了一下,很不错!
capoatguitar 2004-08-17
  • 打赏
  • 举报
回复
hook都写的出来,定时器却不会作了,真晕,
我纳闷…………
oioioi-090 2004-08-17
  • 打赏
  • 举报
回复
已搞定,改写了一个控件, 感谢fei19790920(饭桶的马甲(抵制日货))

unit ZTimer;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;

type
TZTimer = class(TTimer)
private
function GetIdleTime: Longint;
procedure SetIdleTime(const Value: Longint);
protected
{ Protected declarations }
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
property IdleTime: Longint read GetIdleTime write SetIdleTime;
published

end;

procedure Register;

implementation

var
Instances: integer;
ElapsedTime: Longint;
hHook: LongWord;

procedure Register;
begin
RegisterComponents('Z', [TZTimer]);
end;

Function HookProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
Begin
Result := 0;
If(peventmsg(lparam)^.message = WM_LBUTTONDOWN) Or
(peventmsg(lparam)^.message = WM_LBUTTONUP) Or
(peventmsg(lparam)^.message = WM_LBUTTONDBLCLK) Or
(peventmsg(lparam)^.message = WM_MOUSEMOVE) Or
(peventmsg(lparam)^.message = WM_RBUTTONDOWN) Or
(peventmsg(lparam)^.message = WM_RBUTTONUP) Or
(peventmsg(lparam)^.message = WM_RBUTTONDBLCLK) Or
(peventmsg(lparam)^.message = WM_MBUTTONDOWN) Or
(peventmsg(lparam)^.message = WM_MBUTTONUP) Or
(peventmsg(lparam)^.message = WM_KEYDOWN)

Then ElapsedTime := GetTickCount;
Result := CallNextHookEx(hHook, iCode, wParam, lParam);

End;

procedure Hook(En: Boolean);
begin
If En Then
hHook := SetwindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0)
Else
UnHookWindowsHookEx(hHook);

end;
{ TZTimer }

constructor TZTimer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
hook(true);
end;

destructor TZTimer.Destroy;
begin
Hook(false);
inherited;
end;

function TZTimer.GetIdleTime: Longint;
begin
Result := GetTickCount - ElapsedTime;
end;

procedure TZTimer.SetIdleTime(const Value: Integer);
begin
ElapsedTime := GetTickCount + Value;
end;

end.
oioioi-090 2004-08-16
  • 打赏
  • 举报
回复
谢拉
邮箱是seaweaver@163.com
fei19790920 2004-08-16
  • 打赏
  • 举报
回复
这个简单啊,等我回家发个给你
nyf1220 2004-08-16
  • 打赏
  • 举报
回复
做个定时器,
把写的文件考到主机就行了呀

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧