Make a form not focusable in C#
Its solved!
I've tried the solution from gehho, but I also needed to override the CreateParams
method:
private const int WS_EX_NOACTIVATE = 0x08000000;
protected override CreateParams CreateParams
{
get
{
var createParams = base.CreateParams;
createParams.ExStyle |= WS_EX_NOACTIVATE;
return createParams;
}
}
Instead of trying to reset the active window after your one has been clicked, I would rather try to prevent your window from receiving focus/being activated.
Have a look at this article. At the end, the author briefly explains how this can be done:
How can I prevent my window from getting activation and focus when shown?
In Windows Forms 2.0 there is a new property called ShowWithoutActivation – which you would need to override on the Form. In native applications you can use SetWindowPos with the SWP_NOACTIVATE flag or the ShowWindow with the SW_SHOWNA flag.
Furthermore, in this article he provides a code example for Windows Forms:
If you want a full-on form, you can now override a property called
ShowWithoutActivation
:public class NoActivateForm : Form { protected override bool ShowWithoutActivation => true; }Keep in mind this does not “prevent” activation all the time – you can still activate by calling the
Activate()
,Focus()
… etc methods. If you want to prevent clicks on the client area from activating the window, you can handle theWM_MOUSEACTIVATE
message.private const int WM_MOUSEACTIVATE = 0x0021, MA_NOACTIVATE = 0x0003; protected override void WndProc(ref Message m) { if (m.Msg == WM_MOUSEACTIVATE) { m.Result = (IntPtr)MA_NOACTIVATE; return; } base.WndProc(ref m); }