2016-05-07 5 views
0

Итак, вот чего я пытаюсь достичь. У меня есть приложение для чата winforms, которое я хочу поставить поверх других приложений, которые являются полноэкранными, я не хочу, чтобы он делал фокус, но я хотел бы, чтобы он принял ввод пользователя в текстовое поле. До сих пор я достиг первой части, и мое приложение для чата остается поверх других приложений, не сосредотачиваясь на нем. Вот что я использовал:Winforms no focus accept ввод клавиатуры

const int WS_EX_NOACTIVATE = 0x8000000; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams ret = base.CreateParams; 
     ret.ExStyle |= WS_EX_NOACTIVATE; 
     return ret; 
    } 
} 


public Form1() 
{ 
    InitializeComponent(); 
    TopMost = true; 
} 

Теперь проблема в том, что я ничего не могу написать в текстовое поле. Все кнопки работают нормально, я могу щелкнуть их, и они запускают события, но текстовое поле не принимает никаких данных.

+0

Попробуйте добавить 0x00000080 флаг, который WS_EX_TOOLWINDOW –

+0

Еще не принимает никакого ввода – JanRad

+0

я хотел бы сказать, что вам нужно активировать фокус окна. Как вы могли писать текст, если у него не было сосредоточено текстовое поле? –

ответ

0

Переопределите этот параметр inf свой класс Form и удалите TopMost = true; из вашего кода. Это будет работать и будет сосредоточено при попытке редактировать текстовое поле.

protected override bool ShowWithoutActivation 
{ 
    get { return true; } 
} 

private const int WS_EX_TOPMOST = 0x00000008; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams createParams = base.CreateParams; 
     createParams.ExStyle |= WS_EX_TOPMOST; 
     return createParams; 
    } 
} 

Нашел здесь: Look at second answer

+0

btw, я тестировал его, он работает для меня. Форма срабатывает в определенное время и не появляется в фокусе. Я могу продолжать писать и перемещать стрелки в других приложениях, даже если это появляется. –

+0

Дело в том, что я использовал WS_EX_NOACTIVE, чтобы мое приложение находилось поверх полноэкранного экрана, но когда я нажимаю на него, панель задач Windows не появляется. Думаю, у меня либо есть чат, либо панель задач, либо нет. – JanRad

+0

Я думаю, что наличие самого верхнего в приложении Fullscreen бессмысленно. Это приложение FULLscreen, чтобы избежать появления других вещей, даже Steam избегает его, если вы не назовете фокус на окна Steam с помощью Shift + Tab или браузера/медиаплеера при воспроизведении полноэкранных видеороликов (для чего вам нужно окно над видео?) Windows 8.X и 10 делают это, они даже отправляют уведомления Windows, если вы являетесь полноэкранным в приложении DiretcX/OpenGL и раздражаете xc! Как пользователь Windows, я бы не хотел, чтобы окна всегда были самыми высокими каждый раз, даже в полноэкранном режиме D: jajaja –