导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
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不能达到效果~ 请教高人了。小菜一枚。
----------------------------------------------
-
作者:
2021/10/25 15:48:53
1楼:
winexec('aaa.exe -f',SW_normal); 你这是要让这个程序显示出来,不是偷偷的运行? 至于你的检测,如果是定时检测,用 Timer 也可以,只不过把检测间隔从10秒,改为1秒或者2秒。 另外,你的那个参数问题,看不懂。
----------------------------------------------
-
作者:
2021/10/25 17:07:13
2楼:
试着做成屏保程序 https://www.cnblogs.com/myamanda/articles/1597572.html
----------------------------------------------
-
作者:
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)这个参数运行,根本就是个死循环了。。
----------------------------------------------
-
作者:
2021/10/26 11:10:44
4楼:
@nelson 这是一个办法,但是并不是好的办法。毕竟你要加入到系统里去,最好是程序本身来判断。。
----------------------------------------------
-
作者:
2021/10/26 12:57:54
5楼:
比如像Q这类软件都会有一个检测用户是否在用电脑的判断,当用户在使用电脑的时候马上就会作出反映,应该不是TIMER来实现的吧。
----------------------------------------------
-
作者:
2021/10/26 13:52:32
6楼:
判断键盘滑标是否有动静..
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/10/26 14:53:28
6楼:
Application.OnMessage 用消息来判断
----------------------------------------------
-
作者:
2021/10/26 15:55:05
7楼:
3 楼,你的问题其实就变成了:要不要杀死原来的进程? 我不知道你的需求。正常情况下,一个进程如果存在,就让它持续运行。如果不在了,才需要启动它。也就是要监控它是不是在运行。监控一个进程是不是在运行,就需要另外一个进程,那个监控进程,就是类似看门狗的东东。 至于说你非要杀死再重启,又不想每秒都重启,而是10秒才重启,你的 Timer 照样可以是1秒啊,只不过你自己在 OnTimer 里面加个计数器,每秒加1,加到10你才重启就好了。
----------------------------------------------
-
作者:
2021/10/27 9:59:31
8楼:
我感觉,这是一个做坏事的 程序。
----------------------------------------------
(C)(P)Flying Wang
作者:
2021/10/27 10:11:16
9楼:
@wang_80919 挖矿专用程序, 只要用户不在电脑前, 我就开始挖..
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/10/27 11:35:40
10楼:
你的代码里面明确每次要杀死aaa了, KillTask('aaa.exe'); 用户不操作电脑10秒,就会先杀死aaa,在运行aaa,你的代码逻辑就是这样的啊,你不想杀死aaa,就做一下判断aaa是否已经运行然后通过消息控制它在前台显示还是后台运行。 至于用timer检测还是用其他方法检测,都应该能够满足需求的
----------------------------------------------
-