Мое приложение использует несколько окон
Я хочу скрыть одно конкретное окно в случае, когда приложение теряет фокус (когда активное окно не является окном приложения) source
Я обрабатываю 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 по таймеру?