Windows восстановление позиции иногда не работает - PullRequest
1 голос
/ 21 марта 2020

Я написал простую C# программу, которая сохраняет расположение и размеры открытого windows в файл, а затем может также восстановить их из этого файла (на основе аргументов командной строки). Это всегда работает для некоторых программ, а не для других, и я не знаю почему.

Часть, которая получает положение окна (x, y) и размер (w, h), использует эту стандартную функцию Windows

WINDOWPLACEMENT placement = GetWindowPlacement(windowCaption);

Часть, которая устанавливает размер и положение окна, использует эту стандартную Windows функцию

SetWindowPos(target_hwnd, IntPtr.Zero, wi.x, wi.y, wi.w, wi.h, 0);

Они объявлены в коде следующим образом:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetWindowPos(IntPtr hWnd,
    IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);

Остальная часть кода ничем не примечательна: сохраните некоторые данные в текстовый файл, прочитайте некоторые данные из текстового файла. Все это скопировано из онлайн-примеров, и я начинающий C# / Windows программист.

Программа работает довольно хорошо на некоторых программах, а на других - совсем нет. Я могу восстановить Chrome до его размера и положения, но не Firefox, а не Microsoft Edge. Visual Studio Code работает, но не R Studio. Это меня удивляет, потому что (не очень разбираясь в Windows программировании) я ожидал, что часть GUI любой программы Windows была закодирована с использованием стандартных библиотек Windows, и поэтому любая программа, работающая на Windows ответил бы SetWindowPos таким же образом.

Почему это работает для некоторых программ, а не для других?

Мне нужно сделать это, потому что у меня есть монитор 4K, и как-то Windows теряет размер и положение большинства windows каждый раз, когда монитор выключается или время ожидания истекло. Я написал об этом отдельно, не нашел решения, поэтому я написал свой, который в основном работает. https://superuser.com/questions/1513288/windows-loses-window-position-on-large-monitor

Работает Windows 10 Pro, полностью исправлен, на 2019 P C с solid спецификациями.

...