2010-08-22 87 views
4

我使用下面的代碼:如何在VB6中檢測我的顯示器分辨率?

Private Sub Form_Load() 
    ResWidth = Screen.Width \ Screen.TwipsPerPixelX 
    ResHeight = Screen.Height \ Screen.TwipsPerPixelY 
    ScreenRes = ResWidth & "x" & ResHeight 
    MsgBox (ScreenRes) 
End Sub 

而且我GOOGLE了其他幾個類似的代碼。問題是,我總是收到一個消息框,說我的分辨率是1200x1200,儘管我的實際分辨率是1920x1200。爲什麼我會得到不好的結果?

+0

添加screen.width,screen.height,twipsperpixelx,和你的消息框twipsperpixely值,您能得到什麼? – jac 2010-08-22 05:04:25

+0

在我的系統上正常工作!好奇的問題.... – Dabblernl 2010-08-22 20:24:01

+1

我認爲這應該工作,它看起來很好。系統有什麼不尋常之處嗎? – MarkJ 2010-08-23 08:17:52

回答

4

不知道爲什麼這樣不起作用,但可以使用Windows API。

Private Declare Function GetSystemMetrics Lib "user32" _ 
    (ByVal nIndex As Long) As Long 

然後當你需要的屏幕寬度和高度,定義這些常量:

Private Const SM_CXSCREEN = 0 
Private Const SM_CYSCREEN = 1 

然後你可以使用GetSystemMetrics無論你需要它。如果將聲明和常量添加到模塊(.BAS)更有意義,那麼只需公開聲明和常量。

Dim width as Long, height as Long 
width = GetSystemMetrics(SM_CXSCREEN) 
height = GetSystemMetrics(SM_CYSCREEN) 

GetSystemMetrics on Microsoft Support

2

似乎存在與VB6 Screen對象的問題。根據KB253940 PRB: Incorrect Screen Object Width/Height After the Desktop Is Resized

在Visual Basic IDE中,Screen對象在屏幕分辨率更改後報告了一個不正確的桌面寬度值。當應用程序在IDE外部執行時,如果從系統托盤中的「顯示屬性」圖標更改了分辨率,Screen對象的「寬度」和「高度」屬性將返回不正確的值。

KB建議使用GetDeviceCaps API函數來解決此問題:

Private Declare Function GetDeviceCaps Lib "gdi32" _ 
     (ByVal hdc As Long, ByVal nIndex As Long) As Long 

Private Const HORZRES = 8 
Private Const VERTRES = 10 

Private Sub Form_Load() 
    ResWidth = GetDeviceCaps(Form1.hdc, HORZRES) 
    ResHeight = GetDeviceCaps(Form1.hdc, VERTRES) 
    ScreenRes = ResWidth & "x" & ResHeight 
    MsgBox (ScreenRes) 
End Sub