通过代码取消空闲状态...

时间:2011-05-30 12:33:48

标签: delphi

我正在检测机器的空闲状态,如果空闲,我会执行操作。

其中一个动作必须取消此状态,否则它将进入循环 我想在我执行它时阻止重新进入我的空闲循环,我该怎么做?

3 个答案:

答案 0 :(得分:5)

防止重新入场的一种方法是记住你是否输入了事件处理程序:

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
  private
    { Private-Deklarationen }
    FInOnIdle: Boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  if FInOnIdle then Exit;

  FInOnIdle := True;
  try
    
  finally
    FInOnIdle := False;
  end;
end;

答案 1 :(得分:1)

在表单的变量中添加一个标记,用于测试您是否已处于空闲循环中:

interface

type TForm1 = class(TForm)
...
private
...
  InIdleLoop: boolean;
...

implementation

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  if InIdleLoop then exit;
  InIdleLoop:= true
  try
   //Do your idle processing here

  finally
    InIdleLoop:= false;
  end; {try}
end;

答案 2 :(得分:0)

按下一个键,我想这会做的伎俩

  keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0);
  keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);

按下shift键,系统会认为计算机不再闲置......