VBSCRIPT - SWbemObjectSet 错误 8004100C [英] VBSCRIPT - SWbemObjectSet error 8004100C

查看:33
本文介绍了VBSCRIPT - SWbemObjectSet 错误 8004100C的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了一个脚本来检测何时连接了第二台显示器,并相应地切换 Rainmeter 布局.但是,偶尔当我将计算机置于睡眠状态,然后将其唤醒时,会出现以下错误:

I wrote a script to detect when I have a second monitor connected, and to switch Rainmeter layouts accordingly. However, occasionally when I put my computer to sleep, then wake it up, I get the following error:

---------------------------
Windows Script Host
---------------------------
Script: C:\Users\Tim\Documents\Shortcuts\Create\scripting\commandSniffer\detectMonitor.vbs

Line:   12

Char:   2

Error:  Not supported 

Code:   8004100C

Source:     SWbemObjectSet

---------------------------
OK   
---------------------------

我真正想做的就是让我的脚本在我的电脑睡觉时不崩溃.如果对此没有简单的解决方法,我如何捕获脚本中的错误并忽略它?完整源代码如下:

All I really want to do is keep my script from crashing when I sleep my computer. If there's not an easy fix for this, how can I catch the error in the script and ignore it? Full source code below:

strComputer = "Localhost"
singleMon = "myLayout"
doubleMon = "myLayout(2monitor)"
rainmeterPath = """C:\Program Files\Rainmeter\Rainmeter.exe"" !LoadLayout "
previousState = 1
set wshshell = createobject("wscript.shell")

do
    Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\wmi") 
    Set colItems = objWMI.ExecQuery ("SELECT * FROM WMIMonitorID")
    'Wscript.Echo strComputer & " has " & colItems.count & " monitors configured."
    if not isnull(colItems) and previousState <> colItems.count then
        if colItems.count = 2 then
            wshshell.run rainmeterPath & doubleMon,0
        else
            wshshell.run rainmeterPath & singleMon,0
        end if
        previousState = colItems.count
    else
        wscript.sleep 9000
    end if
    wscript.sleep 1000
loop

推荐答案

On Error Resume Next 

将错误处理从 vbscript 转移给您.您现在需要在每次可能导致错误的调用之后测试错误.

transfers error handling from vbscript to you. You now need to test for errors after every call that might cause one.

If err.number <> 0 then
    'fix error or ignore
    err.clear
    'If decide to crash
    'err.raise(err.number, blah, blah, blah)
    'wscript.Quit
End If

错误处理是一个链条.从最低的函数调用到应用程序.Windows 会寻找错误处理程序,如果找不到它就会崩溃.Err.raise 允许您将错误向上传播.

Error handling is a chain. From lowest function call up to the app. Windows looks for error handlers, if it can't find one it crashes. Err.raise allows you to propagate errors up the chain.

这篇关于VBSCRIPT - SWbemObjectSet 错误 8004100C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆