首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_winreg.EnumKey(键,i)不工作吗?

_winreg.EnumKey(键,i)不工作吗?
EN

Stack Overflow用户
提问于 2015-08-18 21:51:53
回答 1查看 1.2K关注 0票数 0

嘿,我试着重建一个剧本。在python 3中,我使用了_winreg,并且脚本正在运行,但是我需要它在python 2中,现在我得到了这个erorr:

代码语言:javascript
复制
File "discoverNetworks.py", line 14, in printNets
guid = _winreg.EnumKey(key, i)
WindowsError: [Error 259] No more data is available

当然,在那个文件夹里有很多文件。

这是代码:

代码语言:javascript
复制
import _winreg
def val2addr(val):
    addr = ''
    for ch in val:
        addr += '%02x '% ord(ch)
    addr = addr.strip(' ').replace(' ', ':')[0:17]
    return addr
def printNets():
    net = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Signatures\\Unmanaged"
    key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,net)
    print '\n[*] Networks You have Joined.'
    for i in range(100):
        try:
            guid = _winreg.EnumKey(key, i)
            netKey = _winreg.OpenKey(key, str(guid))
            (n, addr, t) = _winreg.EnumValue(netKey, 5)
            (n, name, t) = EnumValue(netKey, 4)
            macAddr = val2addr(addr)
            netName = str(name)
            print '[+] ' + netName + ' ' + macAddr
            _winreg.CloseKey(guid)
        except WindowsError:
            break
def main():
    printNets()
if __name__ == "__main__":
    main()

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-08-18 22:04:57

EnumKey()被设计为反复调用,直到抛出WindowsError为止。来自文献资料

winreg.EnumKey(key,指数 。。。 该函数在每次调用时检索一个子键的名称。通常会反复调用它,直到引发WindowsError异常为止,这表明没有更多的值可用。

但是,在Python3中运行WindowsError时没有收到它的原因是而不是。

事实上,EnvironmentErrorIOErrorWindowsErrorVMSErrorsocket.errorselect.errormmap.error已在3.3 (来源)中合并为OSError

您可以通过异常处理(except WindowsError)来处理错误,也可以通过在QueryInfoKey中预先确定值的数量来避免错误,如这个答案所示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32083200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档