У меня есть файл HTA, в котором я изменяю размер окна, чтобы оно отображалось в правой части экрана.
На некоторых компьютерах (около 10 из 120) я получаю ошибку несоответствия типовв строке, где мы хотим использовать разрешение пользователя (переместить или изменить размер окна).Я принимаю значение, которое я получаю, не является целым числом или, может быть, это ничто.
Все компьютеры работают на 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% случаев.
Если мы не вернем разрешение, мы попробуем другой способ получить разрешение 1-го экрана.
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
А здесь мы попробуем 3-й способ.
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
У вас естьесть идеи, в чем может быть проблема.Почему я вообще получаю сообщение об ошибке?
#
Как посоветовал Ансгар Вичерс, я запустил на ПК простые 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
/