如何在VB6中检测显示器的分辨率?

时间:2010-08-22 04:01:05

标签: vb6

我使用以下代码:

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

我用谷歌搜索过其他几个类似的代码。问题是,我总是得到一个消息框说我的分辨率是1200x1200,虽然我的实际分辨率是1920x1200。为什么我的成绩不好?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

VB6中的Screen对象似乎存在问题。根据KB253940 PRB: Incorrect Screen Object Width/Height After the Desktop Is Resized

  

在Visual Basic IDE中,Screen对象在更改屏幕分辨率后报告桌面宽度的值不正确。当应用程序在IDE外部执行时,如果从系统托盘中的“显示属性”图标更改了分辨率,则屏幕对象的“宽度”和“高度”属性将返回不正确的值。

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

答案 2 :(得分:0)

如果您正在使用任何Windows Mobile,那么方式会有所不同。您需要使用下一个方法:

Export-Csv

在上一个示例中,将屏幕宽度的32%分配给Width = (Screen.PrimaryScreen.WorkingArea.Width * 0.32) 变量。