3

I've a little problem about focus on WPF. I whant to create a window, always on top, and that never get the focus (even if we click on it).

Here's my solution :

public partial class SkinWindow : Window
{
    public SkinWindow()
    {
        InitializeComponent();
        Loaded += ( object sender, RoutedEventArgs e ) => SetNoActiveWindow();
    }

    private void SetNoActiveWindow()
    {
        WindowInteropHelper helper = new WindowInteropHelper( this );
        SetWindowLong( helper.Handle, GWL_EXSTYLE, WS_EX_NOACTIVATE );
        LockSetForegroundWindow( LSFW_LOCK );
    }

    const int GWL_EXSTYLE = -20;
    const int WS_EX_NOACTIVATE = 134217728;
    const int LSFW_LOCK = 1;

    [DllImport( "user32" )]
    public static extern bool LockSetForegroundWindow( uint UINT );

    [DllImport( "user32" )]
    public static extern IntPtr SetWindowLong( IntPtr hWnd, int nIndex, int dwNewLong );
}

First problem : It's works, but I've to select an other window to "remove" the focus of my application (after the focus is not gave again, even if I click on my window). Second problem : When I move or resize the window, the modifications happens when I drop the window.

Do you have any ideas / links / docs ? Thank you :)

Antoine Blanchet
  • 325
  • 2
  • 17

1 Answers1

0

You might want to have a look at this SO post: Make a form not focusable in C#. The answer is specific to Windows Forms. However, the main part is done using Win32 functions, so maybe you can get some ideas from there...

Community
  • 1
  • 1
gehho
  • 9,049
  • 3
  • 45
  • 59