python - 用 Winapi 替换 WMI 调用

标签 python windows winapi python-2.7 wmi

我目前正在寻找用等效的 win32 api 调用替换我所有使用 WMI 的代码。我这样做是因为我注意到 WMI 调用比 win32 api 调用花费的时间。下面是一些示例:

上市服务:

  • wmi:~4 秒
  • winapi:~0.003 秒

列出打印机:

  • wmi:~0.5 秒
  • winapi:~0.009 秒

列出 Windows 用户:

  • wmi:~0.5 秒
  • winapi:~0.2 秒

是否可以替换所有 wmi 调用?作为一般规则,是否可以使用 winapi 调用执行 WMI 中可用的每项任务?

我已经设法替换了我的大部分 wmi 代码,但我还剩下以下代码:

  • 创建还原点
  • 枚举网络适配器
  • 枚举分区

我在枚举网络适配器方面遇到了一些困难。

还值得一提的是,我正在使用 python (2.7) 执行所有这些调用(使用 ctypes、windll 和 win32 api 库,例如 win32net、win32service 等...)。

最佳答案

:是否可以替换所有wmi调用?

A:除了少数异常(exception),大多数 WMI 查询都可以用 WinAPI 方法替换。

:一般来说,WMI 中可用的每项任务都可以通过 winapi 调用来执行吗?

A:不,并非所有 WMI 类都有 WinAPI 等价物。例如,IIS 相关任务只能使用 IIS WMI Provider 执行.此外,没有用于枚举还原点等的 WinAPI 方法。

对于待处理的任务,您可以使用这些 WinAPI 方法:

关于python - 用 Winapi 替换 WMI 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17651983/

相关文章:

python - Python 列表中生成器的多种用法

python - 计算 Pandas 列的年增长率

c++ - 使用 C++ 执行 CMD 命令

windows - SC删除不删除服务

Java 应用程序在 Windows 关闭时挂起

python - 如何在 Windows 上优雅地终止 python 进程

winapi - IPython无法加载win32api

python - Pygame Font.render() 裁剪带有尖音符号、波形符或抑扬符的大写字母

java - 字符串不可变的非技术优势

C++ Win32静态控件透明背景