Мне также нужно было недавно решить похожую проблему. Ответ Авеля направил меня в правильном направлении. Вот полный пример того, как я это сделал, изменив обычное окно на окно только для сообщений:
class MessageWindow : Form {
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
public MessageWindow() {
var accessHandle = this.Handle;
}
protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
ChangeToMessageOnlyWindow();
}
private void ChangeToMessageOnlyWindow() {
IntPtr HWND_MESSAGE = new IntPtr(-3);
SetParent(this.Handle, HWND_MESSAGE);
}
protected override void WndProc(ref Message m) {
// respond to messages here
}
}
Обратите внимание на конструктор: я обнаружил, что мне нужно получить доступ к свойству Handle, иначе метод OnHandleCreated не будет вызван. Не уверен в причине, возможно, кто-то может объяснить, почему.
Я полагаю, что мой пример кода также ответил бы на связанный вопрос: Как мне создать окно только для сообщений из форм Windows?