我的应用程序使用多个窗口
我想隐藏一个特定窗口,以防应用程序失去焦点(当活动窗口不是应用程序窗口时)source https://stackoverflow.com/questions/466354/how-can-i-tell-if-a-window-has-focus-win32-api/466372#466372
我正在处理Deactivate
我的主要形式的事件。
private void MainForm_Deactivate(object sender, EventArgs e)
{
Console.WriteLine("deactivate");
if (GetActiveWindow() == this.Handle)
{
Console.WriteLine("isactive=true");
}
else
{
Console.WriteLine("isactive=false");
}
}
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
输出总是
deactivate
isactive=true
如果应用程序中的新窗口获得焦点以及单击另一个应用程序,我会观察到相同的行为。
我希望GetActiveWindow
从调用时返回新活动窗口的句柄Deactivate
处理程序。相反,它总是返回我的应用程序窗口的句柄。
这怎么可能?停用事件处理是否“太早”? (而主窗体仍然处于活动状态?)。
如何检测我的应用程序失去焦点(我的应用程序窗口不是活动窗口)并且另一个应用程序获得焦点而无需在计时器上运行 GetActiveWindow?
据我所知, GetActiveWindow 获取调用线程(即您的应用程序)的活动窗口,因此它始终会返回应用程序的当前窗口。我想也许您正在寻找 GetForegroundWindow 它将返回用户当前活动的窗口的句柄。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)