Не сфокусироваться, но разрешить взаимодействие? - PullRequest
8 голосов
/ 24 июля 2011

Экранная клавиатура в Windows 7 позволит вам сосредоточиться на текстовом поле во время ввода с клавиатуры.В C # и .Net, как я могу заставить другое приложение сохранять фокус при принятии ввода, как экранная клавиатура Win7?Или, возможно, лучший способ выразить это, как я не могу сфокусировать свое приложение при взаимодействии с ним?

Я пробовал LockSetForegroundWindow и не видел результатов с ним.

1 Ответ

15 голосов
/ 26 июля 2011

Вы должны установить расширенный стиль WS_EX_NOACTIVATE в вашем окне.Самый простой способ - использовать P / Invoke.

private const int WS_EX_NOACTIVATE = 0x08000000;
private const int GWL_EXSTYLE = -20;

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetWindowLong(IntPtr hwnd, int index);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);

...

var window = new Window();
window.SourceInitialized += (s, e) => {
    var interopHelper = new WindowInteropHelper(window);
    int exStyle = GetWindowLong(interopHelper.Handle, GWL_EXSTYLE);
    SetWindowLong(interopHelper.Handle, GWL_EXSTYLE, exStyle | WS_EX_NOACTIVATE);
};
window.Show();

Вы также можете использовать класс взаимодействия WPF HwndSource для создания окна.Его конструктор принимает расширенный стиль окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...