想用delphi做一屏保 鼠标移动退出屏保,想问下如何判断鼠标是否移动呢
4个回答
展开全部
貌似有2年没回答过问题了。汗……
MouseMove是不行的,因为鼠标必须要在窗口上移动,才能触发这个事件。正如上面所说,如果鼠标在另一个屏幕上呢?又或者,别人动的不是鼠标,而是键盘呢?就不会触发MouseMove了。最简单的做法是,检测有没有输入,有个TLastInputInfo类可以做到。不管是鼠标还是键盘,只要有动作,这个类就能捕捉到。可以这样实现:
窗口上放个闹钟,设置为一秒就行(时间越短,检测越快)。再放一个标签Label。下面看代码
procedure TForm1.Timer1Timer(Sender: TObject);
var
IsInput: TLastInputInfo;
begin
IsInput.cbSize := SizeOf(IsInput);
GetLastInputInfo(IsInput);
if GetTickCount - IsInput.dwTime > 5000 then //这里设置多久开始进入屏保,单位毫秒
begin
Label1.Caption:='已经5秒没有动静了';
//这里放置你的屏保代码,进入屏保状态。
end
else
begin
Label1.Caption:='检测到鼠标或键盘有动作';
//这里退出屏保状态代码
end;
end;
以上代码Delphi7 + Windows7旗舰版测试通过
MouseMove是不行的,因为鼠标必须要在窗口上移动,才能触发这个事件。正如上面所说,如果鼠标在另一个屏幕上呢?又或者,别人动的不是鼠标,而是键盘呢?就不会触发MouseMove了。最简单的做法是,检测有没有输入,有个TLastInputInfo类可以做到。不管是鼠标还是键盘,只要有动作,这个类就能捕捉到。可以这样实现:
窗口上放个闹钟,设置为一秒就行(时间越短,检测越快)。再放一个标签Label。下面看代码
procedure TForm1.Timer1Timer(Sender: TObject);
var
IsInput: TLastInputInfo;
begin
IsInput.cbSize := SizeOf(IsInput);
GetLastInputInfo(IsInput);
if GetTickCount - IsInput.dwTime > 5000 then //这里设置多久开始进入屏保,单位毫秒
begin
Label1.Caption:='已经5秒没有动静了';
//这里放置你的屏保代码,进入屏保状态。
end
else
begin
Label1.Caption:='检测到鼠标或键盘有动作';
//这里退出屏保状态代码
end;
end;
以上代码Delphi7 + Windows7旗舰版测试通过
展开全部
每一个控件都有一个个MouseMove事件的,在这个事件中写关闭屏保程序的代码就可以了!
不用自己判断鼠标移动!
不用自己判断鼠标移动!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的方法都不彻底,对于双屏的情形,屏保在主屏运行,但鼠标在副屏活动就不灵了。
正规的做法是挂钩拦截鼠标消息,多长时间没有收到消息也容易计数,以hook、拦截鼠标消息等关键字去查查吧,有大把的示例代码。
正规的做法是挂钩拦截鼠标消息,多长时间没有收到消息也容易计数,以hook、拦截鼠标消息等关键字去查查吧,有大把的示例代码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
此处写退出代码
end;
Y: Integer);
begin
此处写退出代码
end;
追问
那如果一分钟不动鼠标继续进入屏保呢,怎么写啊
追答
设一计时器 timer
时间间隔为1分钟,1分钟后启动屏保,并停止计时器
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询