mirror of
https://github.com/kangyu-california/PersistentWindows.git
synced 2025-05-10 20:45:38 +02:00
fix random issue on Window 11 that unminimized full screen window is placed at wrong screen, without afecting multi-screen rdp session (#127)
This commit is contained in:
parent
cc769fe59a
commit
f9e244272e
1 changed files with 18 additions and 3 deletions
|
@ -937,7 +937,8 @@ namespace Ninjacrab.PersistentWindows.Common
|
|||
{
|
||||
if (prevDisplayMetrics.IsFullScreen)
|
||||
{
|
||||
RestoreFullScreenWindow(hwnd); //the window was minimized from full screen status
|
||||
//the window was minimized from full screen status
|
||||
RestoreFullScreenWindow(hwnd, prevDisplayMetrics.ScreenPosition);
|
||||
}
|
||||
else if (!IsFullScreen(hwnd))
|
||||
{
|
||||
|
@ -2216,7 +2217,7 @@ namespace Ninjacrab.PersistentWindows.Common
|
|||
}
|
||||
|
||||
|
||||
private void RestoreFullScreenWindow(IntPtr hwnd)
|
||||
private void RestoreFullScreenWindow(IntPtr hwnd, RECT2 rect)
|
||||
{
|
||||
long style = User32.GetWindowLong(hwnd, User32.GWL_STYLE);
|
||||
if ((style & (long)WindowStyleFlags.CAPTION) == 0L)
|
||||
|
@ -2224,6 +2225,20 @@ namespace Ninjacrab.PersistentWindows.Common
|
|||
return;
|
||||
}
|
||||
|
||||
RECT2 intersect = new RECT2();
|
||||
|
||||
bool wrong_screen = false;
|
||||
RECT2 cur_rect = new RECT2();
|
||||
User32.GetWindowRect(hwnd, ref cur_rect);
|
||||
if (!User32.IntersectRect(out intersect, ref cur_rect, ref rect))
|
||||
wrong_screen = true;
|
||||
|
||||
if (wrong_screen)
|
||||
{
|
||||
User32.MoveWindow(hwnd, rect.Left, rect.Top, rect.Width, rect.Height, true);
|
||||
Log.Error("fix wrong screen for {0}", GetWindowTitle(hwnd));
|
||||
}
|
||||
|
||||
RECT2 screenPosition = new RECT2();
|
||||
User32.GetWindowRect(hwnd, ref screenPosition);
|
||||
|
||||
|
@ -2726,7 +2741,7 @@ namespace Ninjacrab.PersistentWindows.Common
|
|||
success &= User32.MoveWindow(hWnd, rect.Left, rect.Top, rect.Width, rect.Height, true);
|
||||
if (prevDisplayMetrics.IsFullScreen && windowPlacement.ShowCmd == ShowWindowCommands.Normal && !prevDisplayMetrics.IsMinimized)
|
||||
{
|
||||
RestoreFullScreenWindow(hWnd);
|
||||
RestoreFullScreenWindow(hWnd, prevDisplayMetrics.ScreenPosition);
|
||||
}
|
||||
else if (restoreTimes >= MinRestoreTimes - 1)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue