In einer Umgebung mit mehreren Monitoren legt der folgende Code jedoch die Fensterposition nur auf den primären Monitor fest. Ich möchte auch den Monitor auswählen können.
Kann jemand bitte erklären, wie dies mit SetWindowPos oder vielleicht einer Kombination mit einer anderen user32.dll-Funktion erreicht werden kann?
Code: Select all
[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);
}
}
Hier ist meine Monitorkonfiguration:

Beachten Sie, dass ich links von meinem primären Monitor einen sekundären Monitor habe. Nachdem ich den von Jimi bereitgestellten Link zum virtuellen Monitor gelesen hatte, stellte ich fest, dass ich zum Verschieben von Fenstern auf den sekundären Monitor einen negativen x-Wert verwenden muss, da dieser links vom Ursprung des primären Monitors liegt (obere linke Ecke oder (0, 0)).
Wenn ich also meine Fensterposition auf die -Koordinate des sekundären Monitors festlegen möchte, muss ich die x-Breite des sekundären Monitors vom Ursprung des primären Monitors subtrahieren, z dies:
Code: Select all
(0, 0) - (1920, 0) = (-1920, 0)
Code: Select all
SetWindowPosition(Process p, -1920, 0);
Mobile version