如何检查我的应用程序是否具有焦点?

时间:2010-09-14 20:16:12

标签: delphi winapi vcl notification-area

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

4 个答案:

答案 0 :(得分:16)

致电Windows.GetForegroundWindow(),然后将HWND传递给Controls.FindControl()功能。如果TWinControl属于您的进程,它将返回一个非零HWND指针。例如:

if FindControl(GetForegroundWindow()) <> nil then
  // has focus ...
else
  // does not have focus ...

答案 1 :(得分:4)

如果您的申请包含单一表格,则

GetForegroundWindow = Handle

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

如果您的应用程序包含多个表单,只需循环遍历它们并检查它们是否与GetForegroundWindow匹配。

答案 2 :(得分:4)

D2007有这个有用的属性

if Application.Active then
//

答案 3 :(得分:0)

Remys响应略有不同:

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

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