Keyboard 通过键盘截取打开C#WinForm未获得焦点

Keyboard 通过键盘截取打开C#WinForm未获得焦点,keyboard,focus,intercept,Keyboard,Focus,Intercept,我正在使用标准方法截取某个键组合,以便显示在MenuStrip(而不是ContextMenuStrip)中有文本框的表单(我的应用程序的要求)。我的表单在所有情况下都会获得焦点,但Microsoft Word打开时除外。当我按键打开表单时,它不会。最顶层属性的切换来自另一篇文章,在大多数情况下似乎有所帮助 从截取击键的窗体: StartMenuPopup.Show(); StartMenuPopup.TopMost = true; StartMenuPopup.TopMost = false;

我正在使用标准方法截取某个键组合,以便显示在MenuStrip(而不是ContextMenuStrip)中有文本框的表单(我的应用程序的要求)。我的表单在所有情况下都会获得焦点,但Microsoft Word打开时除外。当我按键打开表单时,它不会。最顶层属性的切换来自另一篇文章,在大多数情况下似乎有所帮助

从截取击键的窗体:

StartMenuPopup.Show();
StartMenuPopup.TopMost = true;
StartMenuPopup.TopMost = false;
StartMenuPopup.TopMost = true;  //tried leaving this out
StartMenuPopup.Activate();
我希望获得焦点的表单的加载事件处理程序。是的,我知道这是多余的代码,不应该是必要的,但我正在寻找一些组合,工程。到目前为止,这是我尝试了几十种方法后的最佳拍摄

private void StartMenuPopup_Load(object sender, EventArgs e)
{
    try
    {
        this.Activate();
        this.Focus();
        this.TopMost = true;
        this.TopMost = false;
        this.TopMost = true;
    }
    catch { }
}
如果您想查看要重新制作的应用程序,请访问SmartMenu(以前称为StartGen)。我得到的印象是,像Word这样的一些应用程序正在进行他们自己的键盘截取,这在某种程度上干扰了我的键盘截取。上面显示的我的最新尝试解决了PowerPoint和其他应用程序的问题。只是不是微软的Word。我已经看到一些方法建议附带警告,它们不是好的编程实践,表明设计不好。没有必要提出任何“糟糕”的方法,因为我不会使用它们

更多细节。击键截获是在一个单独的DLL中完成的,当代码被混淆时,我将该DLL捆绑到一个exe中。我可以将代码移动到exe程序集中,但考虑到安装后它作为一个程序集运行,我认为这不是原因