如何将重点放在WPF桌面应用程序上?

Gab*_*ros 9 .net c# wpf

我想创建一个可供我女儿使用的Windows桌面应用程序.用例是我给她一个键盘,我启动这个应用程序,这样她就可以按任何她想要的键.应用程序可以显示某些内容(例如,大字或图片中按下的字母等)并阻止我的女儿从我/我的计算机上删除/修改内容.

我对特殊键处理有些困难.我可以使用以下技术禁用ALT + F4但我无法通过这种方式控制ALT + TAB和Win键.

public MainWindow()
{
    InitializeComponent();
    this.KeyDown += new KeyEventHandler(OnButtonKeyDown);
}

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
    if (Keyboard.Modifiers == ModifierKeys.Alt && e.SystemKey == Key.F4)
    {
        e.Handled = true;
    }
    else
    {
        base.OnPreviewKeyDown(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现一篇文章在应用程序处于活动状态时禁用了这些功能,但我认为对于非预期的应用程序退出来说它非常脆弱.

我最终做的是一种有效的解决方法,但感觉不太专业.

public MainWindow()
{
    InitializeComponent();
    System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
    dispatcherTimer.Tick += OnTimerTick;
    dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
    dispatcherTimer.Start();
}

private void OnTimerTick(object sender, EventArgs e)
{
    this.Activate();
    this.Focus();
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我创建了一个定时器,可以不时地调整焦点.这样,如果按下Win键或ALT + TAB,它将带回应用程序.

如何以更专业的方式关注我的应用程序?我正在考虑一种解决方案,它可以检测应用程序何时失去焦点(出于任何原因)并将焦点设置回来.

Fᴀʀ*_*ɴᴀᴍ 5

使用该Window.Deactivated事件并重新激活它以实现您想要的:

this.Deactivated += (s, e) => this.Activate();
Run Code Online (Sandbox Code Playgroud)

您还希望使应用程序全屏显示,并在应用程序内创建一个隐藏的快捷键。按此键后,系统会提示您输入密码,然后您可以关闭该应用程序。否则,关闭应用程序也会很麻烦。