防止窗口焦点变化

时间:2009-05-05 03:38:11

标签: c# wpf focus mouseevent

我正在尝试用一小段代码帮助一个残疾人,以帮助他更轻松地玩游戏。他仅限于轨迹球和一个按钮。

目前他使用屏幕键盘并设法使用它玩其他游戏。我创建了一小段代码来尝试让他的生活更轻松。它使用悬停按钮作为键。当鼠标指针进入按钮时,它会向下发送按键,当它离开按钮时它会向上发送按键。

我有这个工作,我想(或希望)他会喜欢它。当我测试它时它工作得很好。

我想为它添加一个功能。如果他在我的控制下点击,我想发送一个不同的击键。没问题,我可以做到。然而,当我这样做时,焦点从游戏转移到我的控制。

我在MSDN上发现了这个:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/48737c2b-7e6f-4ade-ac1c-7dd2f5cc2b88/

这可以阻止我的窗口激活,但它仍然会导致游戏失去焦点。我可以把焦点放回到游戏中,但我更愿意,如果它永远不会失去焦点。

我在C#和WPF编码。

任何人对你如何做到这一点都有任何想法?

John Fenton

2 个答案:

答案 0 :(得分:2)

钩住一些低级鼠标和键盘钩子,你的应用程序不需要窃取焦点并将其还原。

请看this pastie of a simple WPF appan article by Stephen Toub非常基于{{3}}。

每当您在任何地方左键单击时,都会发送第二次左键单击,因此您可以有效地双击。您可以通过在用户点击时隐藏您的应用来实现您的目标,从而使您的应用永远不会窃取焦点。然后检测点击的位置,并确定是否按下了其中一个按钮,并采取相应的行动。

我意识到我正在挖掘过去,但希望有人会觉得这个答案很有帮助。干杯,对你来说有利于你的编程,以帮助人类同伴!

答案 1 :(得分:1)

您可以尝试取消此博客中提及的事件PreviewLostKeyboardFocus:

http://immortalratblog.blogspot.com/2008/03/canceling-keyboard-focus-change-in-wpf.html

我猜测重点是模拟按键失去了?