VS 2013快速查找在切换到我的应用程序时失去焦点-我如何以编程方式保留/恢复它

本文关键字:编程 方式 恢复 保留 焦点 失去 查找 2013 应用程序 我的 VS | 更新日期: 2023-09-27 18:12:15

我已经制作了一个c#剪贴板应用程序,它可以存储多个"剪贴"以供以后使用。我使用低级键盘钩子来弹出命令打开我的应用程序窗口。当窗口关闭时(或双击剪贴),它应该将选定的剪贴粘贴到最后一个活动窗口(我的应用程序窗口之前的窗口)。我使用低级WINAPI方法来确定最后一个活动的应用程序,捕获它的句柄,然后在模拟Ctrl+V键击粘贴之前将焦点返回给它。

这通常有效,除了在一个非常独特的场景中:我在一个WPF应用程序项目中,在XAML文件中快速查找,光标自动切换到正文文本,而不是快速查找文本框,并将其粘贴在那里。这似乎与失去焦点/激活有关,因为每当我激活另一个窗口时,无论我自己的应用程序是否运行,它都会移动光标。

VB文件,c#文件,以及在WinForm项目中打开的XAML,在VS2013应用程序和我自己的应用程序之间切换时不会窃取快速查找焦点;返回到最后一个活动应用程序时,文本将粘贴到"快速查找"框中。

只有WPF应用程序项目中的XAML才会给我这个问题。

。我知道这是一起潜科学案件,但我希望能遇到更多。这个程序是在编码环境中使用的,它能够处理这些场景是非常重要的。

我已经尝试使用http://www.codeproject.com/Articles/34752/Control-in-Focus-in-Other-Processes的代码获得内部控制句柄,以便我可以将焦点返回给它,但似乎正文文本的句柄和快速查找文本框的句柄是相同的。

VS 2013快速查找在切换到我的应用程序时失去焦点-我如何以编程方式保留/恢复它

一个部分的解决方案是:当我显示另一个表单时,如何防止原始表单失去焦点?我使用的弹出窗口主要是通过低级快捷键导航的,因此不需要显式激活。

在它或我的任何其他窗口上使用鼠标(我期望我的用户有时会这样做),将导致它获得激活并绕过此修复。然而,这是一个边缘案件,似乎无关紧要。希望这对遇到类似情况的人有所帮助(如果不一定是这种情况)。