VBscript拉用户默认打印机

时间:2013-01-30 16:34:33

标签: vbscript registry

我遇到了一个vbscript的情况,这种情况正在困扰着我的冬青地狱。我正在编写一个vbscript,它为用户提取默认的打印机名称。我需要这个的原因是我稍后删除所有打印机,然后用不同的驱动程序将它们放回去(该代码正常工作),我想将用户默认打印机放回到那个打印机。

现在下面是我的代码我遇到的问题是如果我硬编码NetID一切正常但是如果我动态地执行它如下所示我得到一个错误。并非所有计算机都具有相同的netID,因此我需要动态执行此操作。我只是不明白为什么我的代码出错了。错误消息是“注册表项中的root无效”。

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") 
Test = "HKEY_CURRENT_USER\Printers\Defaults\" & Key & "\"
WScript.echo WshShell.RegRead(Test)

示例:

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") ' Returns 12345
Test = "HKEY_CURRENT_USER\Printers\Defaults\" & Key & "\"
WScript.echo WshShell.RegRead(Test) ' Error message

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") ' Returns 12345
Test = "HKEY_CURRENT_USER\Printers\Defaults\12345\"
WScript.echo WshShell.RegRead(Test) 'Returns Default printer value of Lexmark T642

这是我无法弄清楚的。密钥在那里,并将一个名为(Default)的值设置为默认打印机的名称。我可以硬编码脚本以获得我需要的但不是每台机器都具有相同的NetID。我不知道它为什么工作硬编码而不是动态?

1 个答案:

答案 0 :(得分:0)

当您尝试阅读的密钥不存在时,会显示该错误消息。 例如,在我的机器上运行此代码

Set WshShell = WScript.CreateObject("WScript.Shell")
Key = WshShell.RegRead("HKCU\Printers\DeviceOld")
WScript.Echo Key   ' -> "Foxit PDF Printer"

Test = "HKCU\Printers\" & Key & "\"

' ADD this line for debuging
WScript.Echo Test  ' -> "HKCU\Printers\Foxit PDF Printer\"

' but that key not exist, so...
Key = WshShell.RegRead(Test)  ' -> ...of couse error