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

10

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

4个回答

18

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

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

5
D2007具有这个有用的属性。
if Application.Active then
//

4
如果您的应用程序只包含一个表单,则
GetForegroundWindow = Handle

只有当您的窗体是前景窗口时,上面的表达式才为真,也就是说,如果键盘焦点属于此窗体上的控件(或窗体本身)。

如果您的应用程序由多个窗体组成,只需循环遍历它们并检查是否有任何一个与 GetForegroundWindow 匹配即可。


0
一个稍微变化的 Remy 的回答是:
Var
  Win: TWinControl;
Begin
  Win := FindControl(GetForegroundWindow);
  if Win <> nil then
//      StringGrid1.Row :=5;
//      StringGrid1.SetFocus;

对我来说编译没问题,但在调试期间发现它不可靠,即使窗口没有焦点,也会调用stringgrid.setfocus导致错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接