vbscript - 获取屏幕分辨率结果类型不匹配
问题描述
我有一个 HTA 文件,我在其中调整了窗口的大小,以便在屏幕右侧进行调整。
在某些计算机上(大约 120 台计算机中的 10 台),我在我们希望用户使用分辨率(移动或调整窗口大小)的那一行出现类型不匹配错误。我认为我得到的值不是整数,或者它什么都不是。
所有 PC 都在 Win 7 上,我看不出它们之间有任何区别(但似乎有)
这是在“Window_onLoad”子中完成的:
Sub Window_onLoad()
Dim per
Set wshShell = CreateObject("Wscript.Shell")
Set getOSVersion = wshShell.Exec("%comspec% /c ver")
version = getOSVersion.StdOut.ReadAll
Select Case True
Case InStr(version, "n 5.") > 1 : GetOS = "XP"
'WIN XP CODE HERE...
Case InStr(version, "n 6.") > 1 : GetOS = "Vista/7"
'<--- Win 7
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem In colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
在这一点上,我们得到了整数的分辨率,并且在 99% 的情况下都可以正常工作。
如果我们没有得到分辨率,我们尝试另一种方法来获取第一个屏幕的分辨率。
If IsNumeric(intHorizontal) And IsNumeric(intVertical) Then
Else
MsgBox "2"
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor where DeviceID = 'DesktopMonitor1'",,0)
For Each objItem In colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
If IsNumeric(intHorizontal) And IsNumeric(intVertical) Then
在这里我们尝试第三种方式。
Else
MsgBox "3"
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor where DeviceID = 'DesktopMonitor2'",,0)
For Each objItem In colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
End If
End If
在这里我们应该有分辨率,我们只是计算正确的位置。
intLeft = intHorizontal - 300 ' (intHorizontal + 800)/ 2
intTop = 1 ' (intVertical + 400) / 4
Window.resizeTo 300, intVertical - 40 '<--- HERE we get the error
Window.moveTo intLeft, intTop
'Some additional code here...
Case InStr(version, "n 10.") > 1 : GetOS = "W10"
'WIN 10 code here ...
Case Else : GetOS = "Unknown"
MsgBox "Not Supported ( Unknown OS)"
End Select
'Some addtitonal code here...
End Sub
你有什么想法可能是什么问题。为什么我会收到错误消息?
#正如 Ansgar Wiechers 建议的那样,我在遇到问题的 PC 上运行了一个简单的 vbs:
msgbox "TEST"
strComputer = "."
set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem In colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
msgbox TypeName(intHorizontal)
msgbox TypeName(intVertical)
msgbox (intHorizontal)
msgbox (intVertical)
我得到: TEST/ Null/ Null/ 错误: 无效使用intHorizontal
/
解决方案
推荐阅读
- javascript - 使用按钮将数据添加到对象数组
- java - jsoup 从只有一个类的 div 中检索文本
- reactjs - “class”属性在 JSX 中工作:如何?
- ios - 如何让相机功能仅显示在一个标签栏项目中?
- python - “主进程退出”错误 Gunicorn systemd 文件
- android - App Auth library Android 在请求令牌时抛出“找不到文件异常”
- kubernetes - Helm Charts 中的秘密管理
- javascript - 在Javascript中,如何在不关闭子窗口的情况下从子窗口刷新父窗口?
- javascript - Twitter + Facebook 从另一个站点自动发布
- java - Java - 从文件中读取结构松散的数据