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