如何判定窗体的鼠标是否活动,或无输入状态.本人想做个自动关闭程序,比如隔了10分钟后,判断后,鼠标无活动后,就关闭程序
先谢谢了

解决方案 »

  1.   

    API GetLastInputInfo
      

  2.   

    同意楼上procedure TForm1.Timer1Timer(Sender: TObject);
    var
      vLastInputInfo: TLastInputInfo;
    begin
      vLastInputInfo.cbSize := SizeOf(vLastInputInfo);
      GetLastInputInfo(vLastInputInfo);
      if GetTickCount - vLastInputInfo.dwTime > 600000 then
      begin
        timer1.Enabled:= false;
        Application.Terminate;
      end;
    end;
      

  3.   

    利用application 有一个onIdle事件(空闲事件) 即可
      

  4.   

    请将过程放入Timer事件中调试后再发表言论!
    谢谢
      

  5.   

    提醒一下:GetLastInputInfo不支持Win9X和之前的系统。所以,要想在9x下同样适用的话,需要HOOK.
      

  6.   

    用 HOOK,SetWindowsHookEx(WH_MOUSE, HookProc, HInstance, 0);function HookProc(iCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
    begin
      记录相关动作的时间;
    end;定期判断最后一次动作是否超过指定时间,做相应处理。
      

  7.   

    //我也是把程序调试好才发到论坛中的!
    //我的环境Win2003
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      vLastInputInfo: TLastInputInfo;
    begin
      vLastInputInfo.cbSize := SizeOf(vLastInputInfo);
      GetLastInputInfo(vLastInputInfo);
      if GetTickCount - vLastInputInfo.dwTime > 600000 then  //我设置的是10分钟无输入自动关闭主程序,你等了多久?
      begin
        timer1.Enabled:= false;
        Application.Terminate;
      end;
    end;
      

  8.   

    楼主,GetLastInputInfo是100%有用的,我现在的程序就是使用这个函数来判断的。
    而且是2000和XP都可以用的。
    不能用的原因只能有一个,你鼠标或者键盘动了,再不就是你没有设置并放到Timer事件中。void __fastcall TKfMainForm::IdleTimerTimer(TObject *Sender)
    {
    //TODO:每隔5秒钟看看键盘和鼠标多久没动过了。
    LASTINPUTINFO pLASTINPUTINFO = {0};
    pLASTINPUTINFO.cbSize = sizeof(LASTINPUTINFO); GetLastInputInfo(&pLASTINPUTINFO); try
    {
    if((GetTickCount()- pLASTINPUTINFO.dwTime) >= IdleTimer->Tag)
    {
    //已经到设置的时间了,自动下线。
    }
    else
    {

    }
    }catch(...){}
    }
    //---------------------------------------------------------------------------
      

  9.   

    不好意思,是我不操心
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      vLastInputInfo: TLastInputInfo;
    begin
      vLastInputInfo.cbSize := SizeOf(vLastInputInfo);
      GetLastInputInfo(vLastInputInfo);
      if GetTickCount - vLastInputInfo.dwTime > 1000 then  //我设置的是10分钟无输入自动关闭主程序,你等了多久?                          //我这儿设成了1秒
      begin
        timer1.Enabled:= false;
        Application.Terminate;
      end;
    end;