- 題名: ウィンドウがアクティブになるのを防ぎたい
- 日時: 2006/07/07 13:19:17
- ID: 16530
- この記事の返信元:
- (なし)
- この記事への返信:
- [16587] Re[1]: ウィンドウがアクティブになるのを防ぎたい2006/07/11 10:41:42
- ツリーを表示
その後Googleで色々探してやってみました。 メインフォームのウィンドウメッセージをオーバライドして、 WM_WINDOWPOSCHANGINGの時にアクティブにならないように処理すればいいのでは?と思って、 以下のように書いてやってみたのですがやはりアクティブになってしまいます。 アクティブになるのを防ぐのにWM_WINDOWPOSCHANGINGで処理をするので あっているのでしょうか? まだ解決できていないので引き続きよろしくお願いします。 ' 定数の定義 Private Const HWND_TOPMOST As Integer = -1 ' 最全面に表示する Private Const HWND_NOTOPMOST As Integer = -2 ' 最前面に表示するのをやめる Private Const SWP_NOSIZE As Integer = &H1 ' サイズを変更しない Private Const SWP_NOMOVE As Integer = &H2 ' 位置を変更しない Private Const SWP_NOZODER As Integer = &H4 ' 現在のZオーダーを維持 Private Const SWP_NOACTIVATE As Integer = &H10 Private Const SWP_SHOWWINDOW As Integer = &H40 Private Const SWP_NOSENDCHANGING As Integer = &H400 'WM_WINDOWPOSCHANGINGを送らない <Runtime.InteropServices.DllImport("user32.dll")> _ Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As Integer, _ ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer End Function Structure WINDOWPOS Public hWnd As IntPtr 'ウィンドウのハンドル Public WndInsertAfter As IntPtr 'ウィンドウのZオーダをこのメンバで指定したウィンドウの前に置く。または、定数。 Public x As Integer 'ウィンドウの左上隅のX座標 Public y As Integer '同、Y座標 Public cx As Integer 'ウィンドウの幅 Public cy As Integer '同、高さ Public flags As Integer 'ウィンドウの位置と高さを指定するフラッグ End Structure Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Const WM_WINDOWPOSCHANGING As Integer = &H46 Select Case m.Msg Case WM_WINDOWPOSCHANGING Dim wp As New WINDOWPOS If m.LParam <> IntPtr.Zero Then wp = DirectCast(m.GetLParam(GetType(WINDOWPOS)), WINDOWPOS) SetWindowPos(wp.hWnd, HWND_NOTOPMOST, wp.x, wp.y, wp.cx, wp.cy, _ SWP_NOACTIVATE Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOSENDCHANGING) Return End If End Select MyBase.WndProc(m) End Sub
分類:[.NET]