Я написал простую 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 спецификациями.