菜鸟想问如何实现如下功能,我的程序运行之后,如果用户10分钟没有动鼠标、键盘,程序将自动关闭,如何实现??

解决方案 »

  1.   

    用 Timer1 计时,将 Interval设为 600000
    在OnTimer事件里写代码关闭程序Application.Terminate();在KeyUp,MouseUp事件中激活Timer1
      

  2.   

    我用的是消息,使用Application对象的OnMessage事件,再自定义一个过程来处理鼠标键盘事件,在此事件中改变全局变量的值:
    procedure TfrmMain.MessageProc(var Msg: TMsg; var Handled: Boolean);
    { 处理程序的消息,只要接收到鼠标和键盘消息,将锁定时间设为0 }
    begin
      with Msg do
        case Message of
          WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MOUSEMOVE, WM_KEYDOWN,
            WM_LBUTTONDBLCLK: FTimeCount := 0;
        end;
    end;
    然后,用一个定时器来判断全局变量的值就可以了。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure FormKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    Application.Terminate;
    end;procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    Timer1.Enabled:=False;
    Timer1.Enabled:=True;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    Timer1.Enabled:=False;
    Timer1.Enabled:=True;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    Timer1.Interval:=600000;
    end;end.
      

  4.   

    漏了一点,加上OnMouseDown事件。