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

4
我正在使用以下代码:
Private Sub Form_Load()
    ResWidth = Screen.Width \ Screen.TwipsPerPixelX
    ResHeight = Screen.Height \ Screen.TwipsPerPixelY
    ScreenRes = ResWidth & "x" & ResHeight
    MsgBox (ScreenRes)
End Sub

我在谷歌上搜寻了一些类似的代码,但问题是,我总是收到一个消息框,说我的分辨率是1200x1200,尽管我的实际分辨率是1920x1200。为什么会得到错误的结果呢?


将screen.width、screen.height、twipsperpixelx和twipsperpixely值添加到您的消息框中,您会得到什么? - jac
我的系统上完美运行!有点奇怪的问题... - Dabblernl
1
我认为这应该可以工作,看起来很好。系统有什么不寻常的地方吗? - MarkJ
多显示器怎么办? - Deanna
3个回答

5

我不确定为什么那样不起作用,但你可以利用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) - 微软支持


2
似乎VB6中的Screen对象存在问题。根据KB253940 PRB: 在调整桌面大小后,Screen对象宽度/高度不正确
在Visual Basic IDE内,当屏幕分辨率更改后,Screen对象报告桌面宽度的值不正确。当应用程序在IDE外执行时,如果从系统托盘中的“显示属性”图标更改分辨率,则Screen对象的Width和Height属性返回不正确的值。
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

0
如果您正在使用任何Windows Mobile,那么方法略有不同。您需要使用以下公式:
Width = (Screen.PrimaryScreen.WorkingArea.Width * 0.32)

在前面的例子中,将屏幕宽度的32%分配给width变量。

35% 还是 32% ...? - Mohammad Kanan
已更正,谢谢!! =) - Javier Castillo
为什么是32%?这个任意的数字从哪里来的? - TAbdiukov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接