写了一个程序,想实现这样的功能,当没有对程序执行任何操作达到一定时间(比如10分钟),那么程序就自动注销,要输入密码才能再次登陆(类似Windows的屏保)。请问应该怎样编程实现呢?最好能给出实例和语句,因为刚学Delphi不太久。谢谢!
解决方案 »
- 有关扫描枪。
- 调用C#写的Web服务, 怎么老是出现错误
- 如何创建象在ACDsee中选取图形的那种矩形框鼠标,是透明的
- 怎么在取小数点2位?
- 线程的问题:'Thread creation error:存储空间不足,无法处理此命令。'
- 如何使TMEMO的光标所在行显示高亮并能得到此被选行的行号?
- 从com+调用webservice如何实现?
- cxgrid 的问题 望指点
- 从道理来说支持Cobi,但是还有一个问题有点不明。
- 如何在windows中读写硬盘主引导扇区
- 请问TPaintBox控件的OnPaint事件什么情况下触发呢?
- Elecard MPEG-2 PlugIn for WMP 4.0.90626.exe.7z注册表项
每次用户操作后,计时器清零,
到时间就注销
//得到键盘未响应时间
Function LastInput :Integer;
Var
Linput:TLastInputInfo;
Begin
Linput.cbSize:=SizeOf(TLastInputInfo);
GetLastInputInfo(Linput);
Result:=GetTickCount-Linput.dwTime;
End;Timer事件写入If LastInput >10*60000 Then
Begin
//自己写
End;
GetLastInputInfo是检测系统输入的,不能应用到某个程序上!
应该在程序程序级加一个鼠标HOOK与键盘HOOK,用于拦截程序程序中的鼠标输入与键盘输入!当有输入时,记录一下时间点,当再次有输入动作时,用GetTickCount来生成一个时间与ElapsedTime做减法来判断是否有输入!var
ElapsedTime:Longint;//全局变量function MouseHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := 0;
if nCode = HC_ACTION then
begin
case wParam of
WM_LBUTTONDOWN, WM_LBUTTONUP:
ElapsedTime :=GetTickCount;
else
Result := CallNextHookEx(Mhook, nCode, wParam, lParam);
end;
end;
end;function SetHook: Boolean; stdcall;begin
Mhook:=SetWindowsHookEx(WH_MOUSE , @MouseHook, HInstance, 0); Result := Mhook <> 0;
end;procedure TForm1.tmr1Timer(Sender: TObject);
begin
if GetTickCount- ElapsedTime>60000 then
Application.terminate;end;
谢谢你的指教,经过测试发现,键盘钩子可以实现,但鼠标钩子不响应(跟踪了一下,始终只响应WM_MOUSEMOVE消息,而不响应WM_LBUTTONDOWN),请问是为什么?另外,您说的在“在程序程序级加一个鼠标HOOK与键盘HOOK”具体指在哪个地方呢?忘不吝赐教!