在多顯示器環境下使用 SetWindowPos
提供的 SetWindowPosition 代碼片段僅將窗口位置設置為主顯示器。
在多顯示器環境中,顯示器具有特定的佈局和坐標:
計算屏幕坐標
要在特定顯示器上設置窗口位置,我們需要根據屏幕佈局計算正確的 X 坐標。
使用 Screen 對象
.NET Screen 類提供了幾種方法來確定窗口當前顯示的屏幕:
這些方法返回包含指定元素最大部分的 Screen 對象。
檢索 hMonitor 句柄
.NET 參考源顯示,可以通過調用對象的 GetHashCode() 方法來獲取 Screen 對象的 hMonitor 句柄。或者,可以使用 MonitorFromWindow 或 MonitorFromPoint 等原生 Win32 函數來檢索 hMonitor 句柄。
解決方案
基於對顯示器佈局和屏幕坐標的理解,您可以按如下方式修改 SetWindowPosition 方法:
<code class="language-csharp">public static void SetWindowPosition(Process p, int monitorIndex, int x, int y) { IntPtr handle = p.MainWindowHandle; if (handle != IntPtr.Zero) { Screen[] screens = Screen.AllScreens; if (monitorIndex >= 0 && monitorIndex < screens.Length) { Screen targetScreen = screens[monitorIndex]; int correctedX = targetScreen.Bounds.X + x; SetWindowPos(handle, IntPtr.Zero, correctedX, targetScreen.Bounds.Y + y, 0, 0, SWP_NOSIZE); } } }</code>
此更新後的方法採用監視器索引作為附加參數,並根據屏幕佈局計算相應的 X 坐標。
以上是如何使用setWindowPos正確地將窗口跨多個顯示器定位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!