一个WinForms应用程序如何在没有焦点的情况下接受用户输入?

3
我正在使用托管在http://inputsimulator.codeplex.com/上的项目。它使用默认的Microsoft键盘输入代码来发送实际按下的键。

如果我必须使用我的winform作为键盘执行像Microsoft的工具On-Screen Keyboard一样的键盘功能,我必须将焦点提供给需要被编辑的应用程序。

举个例子,我必须在Word中键入一个文档,这时它就有了焦点。但是当我点击我的表单按钮时,焦点转移到了我的表单,而在Word上没有任何内容被写入。

所以...

我想要的是一个不会获取焦点但能够执行功能的表单控件。


你可能想完成你的提问。 - Matt Ball
问题是用来提出的。 ;) - Afnan Bashir
我认为Matt Ball的意思是你实际上并没有提出问题。你尝试了什么,有什么不起作用的地方。你能否更详细地描述一下,对于那些不太熟悉你所描述的两种技术的人来说。"就像微软键盘一样" - 你假设我们了解微软键盘的工作原理。更详细地解释问题,概述你已经采取的解决方法,并针对阻止你成功的具体问题提出具体问题。 - Michael Shimmins
如果我理解正确的话,这个问题是:“如何使一个WinForms应用程序在没有焦点的情况下接受用户输入?”然而,这个问题本身就很广泛,正如其他评论所说,你需要提供更多的细节和示例代码。如果有更多的信息,这可能是一个很好的问题。 - JYelton
@Afnan:希望你不介意进行一些编辑以帮助更清晰地表达。我还将更改标题和标签,以吸引更多可能能够提供帮助的人。 - JYelton
是的,我明白如果我不帮助别人理解我的问题,他们怎么能帮助我。谢谢大家。 - Afnan Bashir
2个回答

2
WS_EX_NOACTIVATE窗口样式标志是为了实现这一点而设计的。以下是一个实现它的示例表单:
public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        this.TopMost = true;
    }
    protected override CreateParams CreateParams {
        get {
            var cp = base.CreateParams;
            cp.ExStyle |= 0x08000000; // Turn on WS_EX_NOACTIVATE;
            return cp;
        }
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接