WPF アプリケーションで起動時にウィンドウをアクティブ化しないようにする

WPF アプリケーションで起動時にウィンドウをアクティブ化しないようにするには、ウィンドウのプロパティで「ShowActivated」のチェックをオフにするとウィンドウの起動時にアクティブ化されないようになります。

また、上記のプロパティではなくコードで実装する方法として、下記のコードのようにウィンドウの表示前に WS_EX_NOACTIVATE スタイルを付け、ウィンドウの表示後に WS_EX_NOACTIVATE を設定する方法でも実現が可能なようです。

Imports System.Windows.Interop
Imports System.Runtime.InteropServices
Class MainWindow
    <DllImport("user32.dll", EntryPoint:="GetWindowLong")>
    Private Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer
    End Function
    <DllImport("user32.dll", EntryPoint:="SetWindowLong")>
    Private Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
    End Function

    Private Const GWL_EXSTYLE As Integer = -20
    Private Const WS_EX_NOACTIVATE As Integer = &H8000000

    Protected Overrides Sub OnSourceInitialized(ByVal e As System.EventArgs)
        MyBase.OnSourceInitialized(e)
        Dim helper As New WindowInteropHelper(Me)
        Dim nStyle As Integer = GetWindowLong(helper.Handle, GWL_EXSTYLE)
        Call SetWindowLong(helper.Handle, GWL_EXSTYLE, nStyle Or WS_EX_NOACTIVATE)
    End Sub

    Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
        Dim source As HwndSource = CType(HwndSource.FromVisual(Me), HwndSource)
        Dim nStyle As Integer = GetWindowLong(source.Handle, GWL_EXSTYLE)
        Call SetWindowLong(source.Handle, GWL_EXSTYLE, nStyle And Not WS_EX_NOACTIVATE)
    End Sub
End Class

スポンサーリンク
広告1
広告1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
広告1