想用delphi做一屏保 鼠标移动退出屏保,想问下如何判断鼠标是否移动呢

 我来答
经朔S8
2011-11-04 · TA获得超过761个赞
知道小有建树答主
回答量:647
采纳率:0%
帮助的人:889万
展开全部
貌似有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旗舰版测试通过
dwjchdu
2011-11-03 · TA获得超过5914个赞
知道大有可为答主
回答量:4576
采纳率:60%
帮助的人:1098万
展开全部
每一个控件都有一个个MouseMove事件的,在这个事件中写关闭屏保程序的代码就可以了!
不用自己判断鼠标移动!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
己闻楣Sx
2011-11-03 · TA获得超过1935个赞
知道大有可为答主
回答量:1057
采纳率:93%
帮助的人:906万
展开全部
楼上的方法都不彻底,对于双屏的情形,屏保在主屏运行,但鼠标在副屏活动就不灵了。
正规的做法是挂钩拦截鼠标消息,多长时间没有收到消息也容易计数,以hook、拦截鼠标消息等关键字去查查吧,有大把的示例代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8f2b309
2011-11-03 · TA获得超过792个赞
知道小有建树答主
回答量:302
采纳率:0%
帮助的人:209万
展开全部
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
此处写退出代码
end;
追问
那如果一分钟不动鼠标继续进入屏保呢,怎么写啊
追答
设一计时器 timer

时间间隔为1分钟,1分钟后启动屏保,并停止计时器
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式