Вы можете указать WM_ACTIVATEAPP
в основной форме и получать уведомления об активации или деактивации вашего приложения:
private const int WM_ACTIVATEAPP = 0x1C;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_ACTIVATEAPP)
{
if (m.WParam == IntPtr.Zero)
BeginInvoke(new Action(() => { Text = "Deactivated"; }));
else
BeginInvoke(new Action(() => { Text = "Activated"; }));
}
base.WndProc(ref m);
}
Примечание: Поскольку оно ужеУпомянутый в комментариях Ганса, при использовании вышеупомянутой опции вы должны быть осторожны, чтобы не попасть в тупик и бесконечный цикл.Обязательно прочитайте комментарии.
В качестве другого варианта вы также можете обнаружить активацию или деактивацию каждой формы, обработав Activate
и Deactivate
событие.Когда форма деактивируется, вы можете проверить, находится ли приложение на переднем плане, проверив, имеет ли Form.ActiveForm
значение:
private void f_Deactivate(object sender, EventArgs e)
{
BeginInvoke(new Action(() =>
{
if (Form.ActiveForm == null)
Text = "App Deactivated"; //App deactivated
else
Text = "Still Active"; //App is still active
}));
}