Здесь, при условии, что доступно по крайней мере два дисплея:
ощьюuser32.dll
и C # я написал метод, который вы видите ниже. Используя дескриптор процесса для окна, он установит позицию окна в{x,y}
место нахождения.
Однако в среде с несколькими мониторами приведенный ниже код устанавливает положение окна только для основного монитора. Я хотел бы иметь возможность выбрать, какой монитор тоже.
Может кто-нибудь объяснить, пожалуйста, как это можно сделать с помощьюSetWindowPos
или, возможно, сочетание с другимuser32.dll
функционировать?
[DllImport("user32.dll", SetLastError = true)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
private const int SWP_NOSIZE = 0x0001;
private const int SWP_NOZORDER = 0x0004;
private const int SWP_SHOWWINDOW = 0x0040;
public static void SetWindowPosition(Process p, int x, int y)
{
IntPtr handle = p.MainWindowHandle;
if (handle != IntPtr.Zero)
{
SetWindowPos(handle, IntPtr.Zero, x, y, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
}
}
Решение основано на комментарии Джими.
Вот моя конфигурация монитора:
Обратите внимание, что у меня есть дополнительный монитор слева от моего основного монитора. Прочитав ссылку на Виртуальный монитор, предоставленную Джими, я обнаружил, что для перемещения окон на дополнительный монитор я должен использовать отрицательное значение x, поскольку оно слева от источника основного монитора (верхний левый угол или <0,0>).
Поэтому, если я хочу, чтобы в моем положении окна была задана координата <0,0> вторичного монитора, я должен вычесть ширину x вторичного монитора из исходной точки основного монитора, например:
<0,0> - <1920,0> = <-1920,0>
Теперь, когда я вызываю SetWindowPosition в моем клиентском коде, я называю это так:
SetWindowPosition(Process p, -1920, 0);
Примечание: я не знаю, что бы вы сделали, если бы мониторы имели разные разрешения. Это более сложная тема, а не вопрос, который я задаю. Кроме того, я не видел необходимости углубляться в тему, так как простой пример, приведенный выше, решил все мои проблемы.