我正在检测机器的空闲状态,如果空闲,我会执行操作。
其中一个动作必须取消此状态,否则它将进入循环 我想在我执行它时阻止重新进入我的空闲循环,我该怎么做?
答案 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键,系统会认为计算机不再闲置......