【发布时间】:2016-02-20 13:08:58
【问题描述】:
我想创建一个可供我女儿使用的 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);
}
}
我发现 an article 在应用程序处于活动状态时会禁用此类功能,但我认为它对于非预期的应用程序退出非常脆弱。
我最后做的是一个可行但感觉不太专业的解决方法。
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();
}
如您所见,我创建了一个计时器,它会不时将焦点带回来。这样,如果您按 Win 键或 ALT+TAB 键,应用程序就会返回。
如何以更专业的方式专注于我的申请?我正在考虑一种解决方案,它可以检测应用程序何时失去焦点(出于任何原因)并重新设置焦点。
【问题讨论】:
-
在我的脑海中,我认为您可以实现偶数
OnFocusLost。不过,不确定它是否适用于所有 WIN 键和其他东西。 -
为什么不创建另一个用户,它只有这个程序,而其他所有东西都被锁定了?然后您只需将用户切换到它,当您想要返回时,将用户切换回来(并输入您的密码)