我正在检测机器空闲状态,如果空闲,我将执行一个操作。
其中一个操作必须是取消此状态,否则它将进入循环
当我在空闲循环中执行时,我想防止再次进入空闲循环,我该怎么做?
防止再次进入的一种方法是记住是否已输入事件处理程序:
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;
在表单的vars中添加一个标志,用于测试是否已经处于空闲循环中:
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;
按下一个键,我想这将完成
keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0);
keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);
按下shift键,系统会认为计算机不再空闲。。。