我们在实际应用中,如果不做特殊处理(如屏蔽掉ALT+TAB或CTRL+ALT+DEL)的话,正在运行的软件就会被窗口焦点(Focus)的转移所遮盖,在多窗口下(上网冲浪)
尤为显见。现在想实现的想法是,既不打扰我的喜爱(游戏),又可以提示我被Back-ground的应用是否正常,该怎么做呢?
在Delphi的VCL帮助里是找不到简单答案的。快捷的方法是掌握Win32的函数调用FlashWindow,其原型见下:
BOOL FlashWindow(
HWND hWnd, //要闪烁提示的窗口句柄
BOOL bInvert //闪烁开关
);
此外,为了侦察当前窗口是否激活,还要知道GetActiveWindow这个函数。该函数没有参数并且返回一个HWND值,它代表当前获得焦点的窗口句柄。在建立应用时,考虑到Application处于被动状态,我们要么是建立一个TTIMER的实例(INSTANCE)以备定时调用我们的事务,要么是把事务处理放在Application.OnIDLE事件中去,以一定的时差侦察应用是否被放入了后台。
对应TTIMER.OnTimer事件的简单例子:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if GetActiveWindow $#@60;$#@62; Form1.Handle Then //窗口被遮住了吗
begin
//是,那么让TaskBar上的Application标题闪烁
FlashWindow(Application.Handle, Flash);
//反转一下,待下一次用
Flash := not Flash;
...
//如果运行正常...
//反之...
end;
end;
这样,在游戏娱乐时,还可以见她(该应用)说:“瞧,我在这儿呢...”.