Программа запускается вместо стандартного explorer.exe. На StackOverflow находил решение, что нужно отлавливать WM_WINDOWPOSCHANGING и ставить флаг SWP_NOZORDER. Проблема в том, что при попытке использовать ALT+TAB в первый раз фокус переходит на окно программы (но оно все еще на заднем плане), а во второй раз окно программы уже переходит на первый план, чего по сути происходить не должно.
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void WndProc(ref Message m)
{
// Listen for operating system messages.
switch (m.Msg)
{
case WM_WINDOWPOSCHANGING:
SetWindowPos(Handle, HWND.BOTTOM, 0, 0, 0, 0, SWP.NOMOVE | SWP.NOZORDER | SWP.NOSIZE | SWP.NOACTIVATE);
break;
case WM_WINDOWPOSCHANGED:
SetWindowPos(Handle, HWND.BOTTOM, 0, 0, 0, 0, SWP.NOMOVE | SWP.NOZORDER | SWP.NOSIZE | SWP.NOACTIVATE);
break;
}
base.WndProc(ref m);
}
...
private void Form1_Load(object sender, EventArgs e)
{
SetWindowPos(Handle, HWND.BOTTOM, 0, 0, 0, 0, SWP.SHOWWINDOW | SWP.NOMOVE | SWP.NOOWNERZORDER | SWP.NOSIZE | SWP.NOACTIVATE);
}
private void Form1_Activated(object sender, EventArgs e)
{
SetWindowPos(Handle, HWND.BOTTOM, 0, 0, 0, 0, SWP.NOMOVE | SWP.NOOWNERZORDER | SWP.NOSIZE | SWP.NOACTIVATE);
}
private void Form1_GotFocus(object sender, EventArgs e)
{
SetWindowPos(Handle, HWND.BOTTOM, 0, 0, 0, 0, SWP.NOMOVE | SWP.NOOWNERZORDER | SWP.NOSIZE | SWP.NOACTIVATE);
}
private void Form1_Enter(object sender, EventArgs e)
{
SetWindowPos(Handle, HWND.BOTTOM, 0, 0, 0, 0, SWP.NOMOVE | SWP.NOOWNERZORDER | SWP.NOSIZE | SWP.NOACTIVATE);
}