大家好,求助一个关于长时间鼠标键盘没有动作,再动作的时候弹出一个登录窗口的如何实现的问题啊,不知在delphi里如何实现比较好呢,谢谢大家

解决方案 »

  1.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    vLastInputInfo: TLastInputInfo;
    begin
    vLastInputInfo.cbSize := SizeOf(vLastInputInfo);
    GetLastInputInfo(vLastInputInfo);
    if GetTickCount - vLastInputInfo.dwTime > 5000 then
    begin
        timer1.Enabled:= false;
        showmessage('超过5秒,用户未动鼠标!');
    end;
    end;尝试用这个
      

  2.   

    华仔真厉害,我一般是这样实现的,可能比较麻烦。
    用一个timer 控件,用循环来递增计数器。当计数器到达某个数时,弹出登陆窗。
    当鼠标移动时,键盘按下时,计数器清零。
      

  3.   

    一个简单的办法是用一个变量记录最后一次访问的时间,在 ApplicationEvent 的 OnMessage 事件里判断,如果是 WM_MOUSEMOVE 或 WM_KEYDOWN 事件就获取当前时间,并与上次动作时间作比较,然后再更新最后一次操作的时间
      

  4.   

    //初始化的时候
    if UpperCase (Config.AutoLock) = 'YES' then Hook;
    procedure TfrmMain.TimerTimer(Sender: TObject);
    var
      dwCount: DWORD; 
    begin
      if UpperCase (Config.AutoLock) = 'YES' then
      begin
        dwCount := GetTickCount;
        if dwCount >= dwLastInputTick then
          dwCount := dwCount - dwLastInputTick
        else
          dwCount := MAXDWORD - dwLastInputTick + dwCount;
        if dwCount div 1000 > DWORD(Config.LockTime) then
        begin
          dwLastInputTick := GetTickCount;
          acLock.Execute;//执行锁定,弹出输入密码窗体
        end;
      end;end;//做的复杂点的话,可以使用键盘鼠标钩子
    procedure TfrmMain.Hook;
    begin
      hHookKbd := SetWindowsHookEx(WH_KEYBOARD, MyKbdHook, HInstance, GetCurrentThreadId);
      hHookMouse := SetWindowsHookEx(WH_MOUSE, MyMouseHook, HInstance, GetCurrentThreadId);
      dwLastInputTick := GetTickCount;
      Timer.Enabled := True;
    end;procedure TfrmMain.UnHook;
    begin
      Timer.Enabled := False;
      if hHookKbd <> 0 then
        UnhookWindowsHookEx(hHookKbd);
      if hHookMouse <> 0 then
        UnhookWindowsHookEx(hHookMouse);
      hHookKbd := 0;
      hHookMouse := 0;
    end;
      

  5.   

    还写个屁呀,Windows的屏保就有这个功能。难道你这个程序不是在Windows下使用?
      

  6.   

    哈,谢谢楼上各位的知道啊,按照Starluck兄的做法是可以实现5秒不动作就会弹出一个信息框啊,但是我想是5秒之后,还不弹出那个框,要等鼠标动作了,就弹出来,可以这样做到么,谢谢大家
      

  7.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    vLastInputInfo: TLastInputInfo;
    begin
    vLastInputInfo.cbSize := SizeOf(vLastInputInfo);
    GetLastInputInfo(vLastInputInfo);
    if GetTickCount - vLastInputInfo.dwTime > 5000 then
    begin
        timer1.Enabled:= false;
        showmessage('超过5秒,用户未动鼠标!');//这声明一个 变量
    end;
    end;
    在通过消息捕获键盘鼠标事件
      

  8.   

    var idleTime:double  ;//我的最短procedure TForm1.FormCreate(Sender: TObject);
    begin
       idleTime:=now  ;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
       if now - idleTime > 60*1000 then//1 min
       begin
          //doyourpress
       end;   idleTime := now;end;
      

  9.   

    var idleTime:double  ; //我的较简易 procedure TForm1.FormCreate(Sender: TObject); 
    begin 
      idleTime:=now  ; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, 
      Y: Integer); 
    begin 
      if now - idleTime > 60*1000 then//1 min 
      begin 
          //doyourpress 
      end;   idleTime := now; end;