Как приложение winforms может принимать пользовательский ввод без фокуса?

Я использую проект, размещенный по адресу http://inputsimulator.codeplex.com/. Он использует коды ввода с клавиатуры Microsoft по умолчанию. to SendKeys, какая клавиша фактически нажата.

Если мне нужно использовать свою winform в качестве клавиатуры для выполнения функций клавиатуры, таких как инструмент Microsoft, экранная клавиатура, я должен предоставить фокус приложению, которое необходимо отредактировать.

Скажем, например, мне нужно напечатать документ в Word, чтобы он был в фокусе. Но когда я нажимаю кнопки своей формы, фокус переходит на мою форму, и в Word ничего не записывается.

So...

Что я хочу, так это сделать элемент управления формой, который не фокусируется, но работает функционально.


person Afnan Bashir    schedule 11.01.2011    source источник
comment
Вы можете закончить задавать свой вопрос.   -  person Matt Ball    schedule 12.01.2011
comment
Вопросы предназначены для того, чтобы их задавали. ;)   -  person Afnan Bashir    schedule 12.01.2011
comment
Я думаю, что Мэтт Болл имеет в виду, что вы на самом деле не задали вопрос. Что вы пробовали, что не работает. Не могли бы вы описать это немного подробнее для тех из нас, кто менее знаком с двумя технологиями, которые вы описываете. как клавиатура Microsoft - вы предполагаете, что мы понимаем, как работает клавиатура Microsoft. Объясните проблему более подробно, опишите подход, который вы использовали для ее решения, и задайте конкретные вопросы о конкретных проблемах, которые мешают вам добиться успеха.   -  person Michael Shimmins    schedule 12.01.2011
comment
Вопрос, если я правильно понимаю, заключается в следующем: как заставить приложение winforms принимать пользовательский ввод без фокуса? Однако этот вопрос сам по себе довольно широк, и, как говорилось в других комментариях, вам необходимо предоставить более подробную информацию и пример кода. Это может быть отличный вопрос с дополнительной информацией.   -  person JYelton    schedule 12.01.2011
comment
@Afnan: Надеюсь, вы не возражаете против некоторого редактирования, чтобы сделать вещи более ясными. Я также собираюсь изменить заголовок и теги, чтобы заинтересовать больше людей, которые могут помочь.   -  person JYelton    schedule 12.01.2011
comment
Да, я понял, что если я не собираюсь помогать другим понять мой вопрос, как они могут помочь мне. Спасибо всем.   -  person Afnan Bashir    schedule 12.01.2011


Ответы (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;
        }
    }
}
person Hans Passant    schedule 12.01.2011