DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: cuiqingbo
今日帖子: 16
在线用户: 9
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
2021/10/25 12:50:51
标题:
实时判断用户在使用电脑的代码疑惑!请大神~ 浏览:1374
加入我的收藏
楼主: 小弟想做一个小程序,当用户没有操作电脑超过时间(比如 10分钟)我会调用一个外部程序进行工作,当用户在使用的时候又停止。查了网上的资料,写了如下代码:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  vLastInputInfo: TLastInputInfo;
begin
    vLastInputInfo.cbSize := SizeOf(TLastInputInfo);
    GetLastInputInfo(vLastInputInfo);
    if (GetTickCount - vLastInputInfo.dwTime) div 1000 > 600 then
    begin
      KillTask('aaa.exe');
      winexec('aaa.exe -f',SW_normal);
    end;
  end;

用了一个timer (10秒运行一次),现在遇到的问题是,检测用户使用电脑不即时,非要这个timer 10秒运行后才可以判断。。还有就是外调的exe是带参数运行的,平时是-a 参数,如果这个timer在运行的话,当第一次正常检测到没人使用了,第二次timer运行时就会又杀掉外部程序再带参数运行,有没有什么办法是当用户未使用电脑时就运行aaa.exe -f ,当用户马上操作电脑的时候再进行切换? 感觉 用timer不能达到效果~ 请教高人了。小菜一枚。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/10/25 15:48:53
1楼: winexec('aaa.exe -f',SW_normal);  你这是要让这个程序显示出来,不是偷偷的运行?

至于你的检测,如果是定时检测,用 Timer 也可以,只不过把检测间隔从10秒,改为1秒或者2秒。

另外,你的那个参数问题,看不懂。
----------------------------------------------
-
作者:
男 teclick (nelson) ★☆☆☆☆ -
普通会员
2021/10/25 17:07:13
2楼: 试着做成屏保程序
https://www.cnblogs.com/myamanda/articles/1597572.html
----------------------------------------------
-
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
2021/10/26 11:08:00
3楼: @pcplayer  对,正常显示!不是偷偷运行,如果把timer的检测间隔改成1秒,你看我的代码,那就会先杀掉原来的 winexec('aaa.exe -a',SW_normal),这个进程,再重新以 winexec('aaa.exe -f',SW_normal)的参数运行外部程序,第一秒是正常的,那第二秒呢? 如果没人操作,winexec('aaa.exe -f',SW_normal) 这个参数的进程会一直被杀,然后又一直以 winexec('aaa.exe -f',SW_normal)这个参数运行,根本就是个死循环了。。
----------------------------------------------
-
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
2021/10/26 11:10:44
4楼: @nelson 这是一个办法,但是并不是好的办法。毕竟你要加入到系统里去,最好是程序本身来判断。。
----------------------------------------------
-
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
2021/10/26 12:57:54
5楼: 比如像Q这类软件都会有一个检测用户是否在用电脑的判断,当用户在使用电脑的时候马上就会作出反映,应该不是TIMER来实现的吧。
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/26 13:52:32
6楼: 判断键盘滑标是否有动静..
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 qw1573 (qw1573) ★☆☆☆☆ -
普通会员
2021/10/26 14:53:28
6楼: Application.OnMessage
用消息来判断
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/10/26 15:55:05
7楼: 3 楼,你的问题其实就变成了:要不要杀死原来的进程?

我不知道你的需求。正常情况下,一个进程如果存在,就让它持续运行。如果不在了,才需要启动它。也就是要监控它是不是在运行。监控一个进程是不是在运行,就需要另外一个进程,那个监控进程,就是类似看门狗的东东。

至于说你非要杀死再重启,又不想每秒都重启,而是10秒才重启,你的 Timer 照样可以是1秒啊,只不过你自己在 OnTimer 里面加个计数器,每秒加1,加到10你才重启就好了。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2021/10/27 9:59:31
8楼: 我感觉,这是一个做坏事的 程序。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/27 10:11:16
9楼: @wang_80919 

挖矿专用程序, 只要用户不在电脑前, 我就开始挖.. 按此在新窗口浏览图片
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 blueflag (昆了) ★☆☆☆☆ -
盒子活跃会员
2021/10/27 11:35:40
10楼: 你的代码里面明确每次要杀死aaa了,      
KillTask('aaa.exe');

用户不操作电脑10秒,就会先杀死aaa,在运行aaa,你的代码逻辑就是这样的啊,你不想杀死aaa,就做一下判断aaa是否已经运行然后通过消息控制它在前台显示还是后台运行。

至于用timer检测还是用其他方法检测,都应该能够满足需求的
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行31.25毫秒 RSS