写了一个程序,想实现这样的功能,当没有对程序执行任何操作达到一定时间(比如10分钟),那么程序就自动注销,要输入密码才能再次登陆(类似Windows的屏保)。请问应该怎样编程实现呢?最好能给出实例和语句,因为刚学Delphi不太久。谢谢!

解决方案 »

  1.   

    加个timer,定时为1000*60*10
    每次用户操作后,计时器清零,
    到时间就注销
      

  2.   


    //得到键盘未响应时间
    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;
      

  3.   

    这个可能要用局部钩子来解决!
    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;
      

  4.   

    TO liangpei2008:
       谢谢你的指教,经过测试发现,键盘钩子可以实现,但鼠标钩子不响应(跟踪了一下,始终只响应WM_MOUSEMOVE消息,而不响应WM_LBUTTONDOWN),请问是为什么?另外,您说的在“在程序程序级加一个鼠标HOOK与键盘HOOK”具体指在哪个地方呢?忘不吝赐教!