Я помогаю с проектом с открытым исходным кодом, используемым для обеспечения более удобного для пользователя способ управления объемом приложений и вывода в Windows, приложение называется earTrumpet, я не владелец проекта, но я хочу улучшить удобство использования приложения, так как я использую его лично. Полное приложение для полноэкранного приложения, такое как игра. < /p>
Мне сказали, что основная проблема заключается в том, что когда запуск вызывает начиная с Windows 10, меню «Пуск», «Панель задач» и т. Д. Пользовательская группа, как объяснено на следующей веб-странице:
https://blog.adeltax.com/window-z-order-in-windows-10/
Играл с каким -то грубым кодом, чтобы попытаться охватить различные сценарии, код будет очищен позже, как только проблема, на которой я застрял, как описано, исправлена. В коде есть TODO в качестве заполнителя для того, что, я думаю, должно произойти.
[*] Откройте игру Fullscreen < /li>
Нажмите клавишу Windows < /li>
Нажмите значок лотка управления громко
[*] Нажмите на полноэкранную игру
ожидаемый результат
> Game
исходный код
Код довольно длинный, поэтому я включил фрагменты того, что я Сделано до сих пор. < /p>
if (_delayFocusCheckTimer)
{
while (this.Visibility != Visibility.Visible)
{
// Give the floating window time to open.
await Task.Delay(250);
}
_delayFocusCheckTimer = false;
}
// Hide the floating window when it loses focus
this.Deactivated += (_, args) => { this.Hide(); };
this.PreviewLostKeyboardFocus += (_, __) => { this.Hide(); };
this.PreviewKeyDown += FlyoutWindow_PreviewKeyDown;
this.MouseDown += FlyoutWindow_MouseDown;
// Timer to check if the floating window is focused or not (in case of Windows key press)
var focusCheckTimer = new System.Windows.Threading.DispatcherTimer(DispatcherPriority.ApplicationIdle)
{
Interval = TimeSpan.FromMilliseconds(250)
};
focusCheckTimer.Tick += (_, __) =>
{
if (!this.IsFocused)
{
this.Hide();
focusCheckTimer.Stop();
}
};
focusCheckTimer.Start();
< /code>
private bool IsMouseOverFlyoutWindow()
{
var rect = new Rect(this.Left, this.Top, this.Width, this.Height);
return rect.Contains(Mouse.GetPosition(this));
}
private void FlyoutWindow_MouseDown(object sender, MouseButtonEventArgs e)
{
if (!IsMouseOverFlyoutWindow())
{
//TODO: Need to detect clicks
this.Hide();
}
}
private void FlyoutWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.LWin || e.Key == Key.RWin) // Left or Right Windows Key
{
this.Hide();
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... is-clicked
Укрытие окна, когда открывается меню Windows, и нажимается значок лотка, а затем пользователь нажимает на полноэкранное ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение