10

我想要做的是检查我的应用程序是否有焦点,因为如果没有,那么我将在通知区域上方弹出一个警报窗口,向最终用户显示一些消息。

4

4 回答 4

18

调用Windows.GetForegroundWindow()然后传递HWNDControls.FindControl()函数。如果属于您的进程,它将返回一个非零TWinControl指针。HWND例如:

if FindControl(GetForegroundWindow()) <> nil then
  // has focus ...
else
  // does not have focus ...
于 2010-09-14T20:40:04.240 回答
5

D2007 有这个有用的属性

if Application.Active then
//
于 2016-06-13T14:38:15.680 回答
4

如果您的应用程序包含一个表单,那么

GetForegroundWindow = Handle

就足够了。当且仅当您的窗体是前台窗口时,上面的表达式才为真,也就是说,如果键盘焦点属于该窗体上的控件(或属于窗体本身)。

如果您的应用程序由多个表单组成,只需遍历它们并检查它们是否匹配GetForegroundWindow

于 2010-09-14T20:21:42.423 回答
0

Remys 的反应略有不同:

Var
  Win: TWinControl;
Begin
  Win := FindControl(GetForegroundWindow);
  if Win <> nil then
//      StringGrid1.Row :=5;
//      StringGrid1.SetFocus;

为我编译好,但我发现它在调试期间不可靠,即使窗口没有聚焦导致错误,也会调用 stringgrid.setfocus。

于 2012-09-25T08:57:04.430 回答