2009-11-17 83 views
0

可見分辨率我不完全知道如何字這個問題,所以我只是要說明我的問題。如何檢查系統

我的VB 6程序在註冊表中保存屏幕的位置,以便在重新加載了它可以有一個默認位置。這按預期工作,但我遇到了一個問題。我有一臺帶有2臺顯示器的電腦。我將窗口拖到第二個屏幕,然後第二天拔下第二個顯示器。每次我加載程序時,它都會出現在碼頭上,但表格本身並不是。

我想這是隱藏在第二顯示器的空間(或者是第二顯示器應該)現在,在我第一次連接一臺顯示器搶回來,但它並沒有顯示出來。顯示器設置使主監視器(1)位於新監視器(2)的左側。我不得不將(2)拖到(1)的左邊,然後我將它拖回到主窗口,一切正常。我提到這一點是因爲我覺得每個監視器號碼的分辨率都是相對於它自己的。多監視器是一個巨大的座標平面嗎?

我想知道的是,當我從註冊表(Form.left和Form.top)獲取位置編號時,是否有辦法檢查系統可用的內容?這不是一個大問題,但我知道我會讓客戶打來電話,最終問:「它的載入,但我無法找到它!」並希望儘可能避免這些電話。

謝謝大家

回答

0

不知道VB的,但你可以調用本地的Win32 API來處理這個問題。

GetSystemMetrics(SM_CMONITORS)返回監視器的數量,或者如果需要區分「真實」監視器和僞顯示監視器,可以使用EnumDisplayMonitors()枚舉它們。

使用MonitorFromPoint()或MonitorFromRect()或MonitorFromWindow()在指定的點標識監視器,然後使用GetMonitorInfo()返回有關該監視器的信息,包括其虛擬屏幕座標。然後,您可以將窗口放置在您選擇的顯示器上。

我不知道如何可靠地檢測第二顯示器是否丟失或斷電。你可以使用設置API(!),我猜 - SetupDiEnumDeviceInfo()可以用來枚舉監視器設備,並且SetupDiGetDeviceRegistryProperty()可以用來檢索每個信息,比如它的當前電源狀態。

0

不是一個真正的回答你的問題,但它可能在處理今後類似的問題,或您的客戶幫助,如果他們碰到它。

如果右鍵單擊任務欄按鈕(或在Windows 7上,右鍵單擊窗口的Aero Peek預覽),您將看到一個Move選項。點擊它,然後按下其中一個箭頭鍵,無所謂。之後,窗口將處於可移動模式,您只需移動鼠標即可,它會重新顯示在屏幕上,就像拖動標題欄一樣。

+0

雅,我在想,正是此舉選項是如何工作的。我試圖用它來拖動窗體。沒有真正的工作。我想我錯過了一些東西。 感謝您的提示。 – 2009-11-17 19:51:17