怎样实现:二十分钟电脑没有键盘和鼠标响应时,引发一个事件(50分)

  • 主题发起人 主题发起人 NewLearner
  • 开始时间 开始时间
N

NewLearner

Unregistered / Unconfirmed
GUEST, unregistred user!
就好象系统的屏幕保卫程序的功能
 
你可以写个程序,把它改成屏保,然后不就可以了?!
 
一秒钟计一次数,发现计满120次还没有键盘和鼠标响应,就……
 
我早就试过了,我是对主窗体捕捉事件,但是行不通,因为通常主窗体在最底层,
 
搞一个记时器,状态变量累加20分钟就响应事件
用钩子钩所有的键盘和鼠标,发现有操作就把记时器里的状态复位。
 
怎样使用钩子,怎样使用hook,我不会啊
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1210317

yanlei的回答是正确的,我已经成功的实现了!

 
hook
//yanlei,yanleigis@21cn.com
var
Form1: TForm1;
hHook: integer;
Timesnum: integer;
implementation
{$R *.DFM}
const
Timescount = 300;

function HookProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall;
begin
Timesnum := 0;

Result := 0;
end;

function StartHook: Boolean;
begin
Result := False;
if hHook = 0 then
begin
hHook := SetWindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0);
if hHook > 0 then
begin
Result := True;
end;
end;
end;

procedure StopHook;
begin
if hHOok > 0 then
begin
UnHookWindowsHookEx(hHook);
hHook := 0;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
hHook := 0;
StartHook();
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(Timesnum);
label1.Caption := floattostr(Timesnum);
if Timesnum > Timescount then
ShowMessage('ok');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
stophook;
end;
看看这个吧。不是我写的哟。
 
采用以上这个做法,如果在运行该程序时,去运行其它程序,也就不能实现屏保效果,
最好是有一个方法可调用WINDOWS内部的屏保计数,不知道有吗?
 
后退
顶部