2012-07-11 119 views
2

我想要檢測當我拿到手柄時在哪個屏幕上顯示一個窗口。我在Win API中發現了一個SetWindowPos()函數,但不幸的是沒有GetWindowPos()只是GetWindowRect(),但是這會導致一些奇怪的值。獲取正在運行應用程序的屏幕

我有兩個裝置,一個左和1280×1024右一個(主)1680×1050。當我想獲得最小化Firefox的位置時,對於任一屏幕,我得到b/l/r/t -31973/-32000/-31840/-32000。

我怎麼知道那是我的左或右我的屏幕?

+1

或者的確,一個窗口可以跨越多個屏幕... – 2012-07-11 21:33:03

+3

不要問一個最小化窗口的窗口位置。它被最小化了,它沒有一個位置。 – 2012-07-11 21:53:27

回答

2

WinAPI的具有MonitorFromRect功能,這可能是你所需要的。我不確定是否有C#等價物,但可以通過interop調用它。

請注意,窗口可以在兩個顯示器,或者兩者都不是。該API具有標誌,例如MONITOR_DEFAULTTONEAREST

+0

還有一個託管API。一旦他使用'GetWindowPlacement'獲得窗口座標,就沒有必要調用/調用任何東西來查找包含它們的屏幕。 – 2012-07-12 02:51:24

2

嘗試GetWindowPlacement,以發現,如果它被還原的窗口將使用該矩形。

+0

@David:當然必須將這些座標與當前活動屏幕的列表進行匹配。 UNeverNo似乎已經打算這樣做。 – 2012-07-11 21:41:13

+0

哎呀,我看不懂,忽略我說的話。 (我認爲他從一個最大化的窗口獲得了奇怪的結果,而不是最小化的結果。) – 2012-07-11 21:48:17

相關問題