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

发布于 2024-09-19 05:01:59 字数 68 浏览 3 评论 0原文

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

What I want to do is check if my application has focus because if it is not then I will popup an Alert Window just over the Notification Area to display some message to the end user.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

南风几经秋 2024-09-26 05:01:59

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

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

Call Windows.GetForegroundWindow() and then pass the HWND to the Controls.FindControl() function. It will return a non-nil TWinControl pointer if the HWND belongs to your process. For example:

if FindControl(GetForegroundWindow()) <> nil then
  // has focus ...
else
  // does not have focus ...
冧九 2024-09-26 05:01:59

D2007 有这个有用的属性

if Application.Active then
//

D2007 has this useful property

if Application.Active then
//
薯片软お妹 2024-09-26 05:01:59

如果您的申请由单一表格组成,那么

GetForegroundWindow = Handle

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

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

If your application consists of a single form, then

GetForegroundWindow = Handle

will suffice. The expression above is true if and only if the your form is the foreground window, that is, if keyboard focus belongs to a control on this form (or to the form itself).

If your application consists of a number of forms, simply loop through them and check if any of them matches GetForegroundWindow.

酸甜透明夹心 2024-09-26 05:01:59

Remys 响应的一个细微变化是:

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

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

A slight variation on Remys response is:

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

compiled ok for me, but I found it unreliable during debug, the stringgrid.setfocus is called even when the window isn't focused causing an error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文