2014-01-20 196 views
0

我正在使用Screen.PrimaryScreen.WorkingArea在主屏幕的右下角放置一個彈出窗口。通常情況下,這個工程,因爲它是intented,但是它有一些問題,當應用程序正在對Screen.PrimaryScreen.WorkingArea不總是返回正確的值

  • 連接到具有不同分辨率不同的屏幕(比如一臺筆記本電腦的辦公室之間移動)的計算機上運行。
  • 作爲RDP服務器的計算機,連接到具有不同分辨率的客戶端(如連接到不同辦公室的家用計算機)。

它看起來像的WorkingArea值並不總是跟上時代的已經改變分辨率多(?)倍,在上述情況下,這使得它難以正確定位彈出窗口之一後。

是否有辦法強制Screen.PrimaryScreen.WorkingArea刷新,或者有沒有其他方法可以在Windows窗體應用程序中使用屏幕分辨率?

+0

我在規模測試這在測試C#4.5的應用程序在Win7和後多屏幕分辨率的變化,上下,和所有在測試應用程序正在運行,我總是從Screen.PrimaryScreen.WorkingArea獲得了正確的大小。這個故事還有更多嗎? – DonBoitnott

+0

您是否嘗試過使用RDP連接?我不完全確定發生這種情況的時間,但看起來像是在涉及RDP或不同屏幕時。我會嘗試TDull提到的Pinvoke,看看是否給出了其他結果。 –

回答

0

你可以嘗試的PInvoke

[DllImport("user32.dll", SetLastError = false)] 
static extern IntPtr GetDesktopWindow(); 

[DllImport("user32.dll", SetLastError = true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); 

RECT scBounds = new RECT(); 
GetWindowRect(GetDesktopWindow(), ref scBounds);