Здесь, при условии, что доступно по крайней мере два дисплея:

ощью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);

Примечание: я не знаю, что бы вы сделали, если бы мониторы имели разные разрешения. Это более сложная тема, а не вопрос, который я задаю. Кроме того, я не видел необходимости углубляться в тему, так как простой пример, приведенный выше, решил все мои проблемы.

Ответы на вопрос(1)

Ваш ответ на вопрос