private IntPtr WndProc(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam) { _prevWndProc = User32Helpers.GetWindowLongPtr(hWnd, WindowLongFlags.GWLP_USERDATA); var msg = (WM)uMsg; switch (msg) { case WM.LBUTTONDOWN: if (_forwardAction != null) { if (IsCursorInDraggableRegion(hWnd, lParam)) { Message message = new Message(); message.Hwnd = hWnd; message.Value = uMsg; message.WParam = wParam; message.LParam = lParam; _forwardAction(message); return(IntPtr.Zero); } } break; } return(User32Methods.CallWindowProc(_prevWndProc, hWnd, uMsg, wParam, lParam)); }
internal static void RemoveWindowFromTaskbar(IntPtr targetWindowHandle) { var newStyle = (WindowExStyles)User32Helpers.GetWindowLongPtr(targetWindowHandle, WindowLongFlags.GWL_EXSTYLE); newStyle &= ~WindowExStyles.WS_EX_APPWINDOW; User32Helpers.SetWindowLongPtr(targetWindowHandle, WindowLongFlags.GWL_EXSTYLE, new IntPtr((long)newStyle)); }
internal static void MakeToolWindow(IntPtr targetWindowHandle) { var newStyle = (WindowStyles)User32Helpers.GetWindowLongPtr(targetWindowHandle, WindowLongFlags.GWL_STYLE); newStyle &= ~WindowStyles.WS_MAXIMIZEBOX; newStyle &= ~WindowStyles.WS_MINIMIZEBOX; User32Helpers.SetWindowLongPtr(targetWindowHandle, WindowLongFlags.GWL_STYLE, new IntPtr((long)newStyle)); }
private static bool IsMainWindow(IntPtr windowHandle) { var style = (WindowStyles)User32Helpers.GetWindowLongPtr(windowHandle, WindowLongFlags.GWL_STYLE); var isMinimized = (style & WindowStyles.WS_MINIMIZE) == WindowStyles.WS_MINIMIZE; return (User32Methods.IsWindow(windowHandle) && (User32Methods.IsWindowVisible(windowHandle) || isMinimized)); }
internal static void MakeLayeredWindow(IntPtr targetWindowHandle) { User32Helpers.SetWindowLongPtr( targetWindowHandle, WindowLongFlags.GWL_EXSTYLE, new IntPtr( (int)User32Helpers.GetWindowLongPtr(targetWindowHandle, WindowLongFlags.GWL_EXSTYLE) | (int)WindowExStyles.WS_EX_LAYERED ) ); }
private static WindowStyles WindowStyle( IntPtr hwnd ) { return ( WindowStyles )User32Helpers.GetWindowLongPtr( hwnd , WindowLongFlags.GWL_STYLE ).ToInt32( ); }
TileMode IsManageable( IntPtr hwnd ) { if ( ContainClient( hwnd ) ) { return TileMode.NoHandle; } if ( hwnd == Handle ) { return TileMode.NoHandle; } String windowText = ThreadWindowHandles.GetWindowText( hwnd ); String classText = ThreadWindowHandles.GetClassText( hwnd ); bool isFloatListName = false; if ( !_TileSetting.IsTilingTarget( hwnd ) ) { isFloatListName = true; } if ( _TileSetting.IsBlackTarget( hwnd ) ) { return TileMode.NoHandle; } Trace.WriteLine( windowText + " : className = " + classText ); #if RECOVER if ( windowText.Contains( "Chrome" ) || windowText.Contains( "Avast Secure" ) || windowText.Contains( "Visual" ) || windowText.Contains( "VIM" ) || classText.Contains( "CabinetWClass" ) || windowText.Contains("pmx") || windowText.Contains("Blender") ) { DWM.setVisibility( hwnd , true ); return TileMode.Tile; } #endif if ( User32Methods.GetWindowPlacement( hwnd , out WindowPlacement windowPlacement ) ) { if ( ( windowPlacement.ShowCmd & ShowWindowCommands.SW_HIDE ) != 0 ) { return TileMode.NoHandle; } } var parent = ThreadWindowHandles.GetParent( hwnd ); var owner = User32Helpers.GetWindow( hwnd , GetWindowFlag.GW_OWNER ); WindowStyles style = WindowStyle( hwnd ); //tosafeがほしいけど別ライブラリ内 var exStyle = ( WindowExStyles )( User32Helpers.GetWindowLongPtr( hwnd , WindowLongFlags.GWL_EXSTYLE ).ToInt32( ) ); bool isParentOK = parent != IntPtr.Zero && IsManageable( parent ) == TileMode.Tile; bool isTool = ( exStyle & WindowExStyles.WS_EX_TOOLWINDOW ) != 0; bool isApp = ( exStyle & WindowExStyles.WS_EX_APPWINDOW ) != 0; if ( isParentOK && !ContainClient( parent ) ) { // なんか見えないウィンドウをmanageするので //Manage( hwnd ); } if ( ( style & WindowStyles.WS_DISABLED ) != 0 ) { return TileMode.NoHandle; } // WS_POPUPWINDOW も含んでいる if ( ( style & WindowStyles.WS_POPUP ) != 0 ) { return TileMode.NoHandle; } bool hasParent = parent != IntPtr.Zero; var winIsVisibleAndNoParent = !hasParent && User32Methods.IsWindowVisible( hwnd ); if ( winIsVisibleAndNoParent || isParentOK ) { if ( ( !isTool && !hasParent ) || ( isTool && isParentOK ) || ( isApp && hasParent ) ) { if ( windowText != null ) { Trace.Write( windowText ); Trace.WriteLine( " isTool : " + isTool + " isApp : " + isApp + " style : " + style ); } if ( isFloatListName ) { return TileMode.Float; } return TileMode.Tile; } } return TileMode.NoHandle; }