我想要做的是检查我的应用程序是否有焦点,因为如果没有,那么我将在通知区域上方弹出一个警报窗口,向最终用户显示一些消息。
问问题
8582 次
4 回答
18
调用Windows.GetForegroundWindow()
然后传递HWND
给Controls.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 回答