首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Virtualbox API使用python获取屏幕快照

使用Virtualbox API使用python获取屏幕快照
EN

Stack Overflow用户
提问于 2021-07-07 15:32:49
回答 1查看 175关注 0票数 0

我正在尝试使用运行在主机上的python脚本从我的来宾Virtualbox会话中获取屏幕截图。从研究中,我做的最好的方法是访问VirtualBox API并使用COM常量来制作屏幕截图。但是,每次我试图运行脚本时,都会得到一个属性错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:\computer_vision_scripts\take_screenshot.py", line 29, in <module>
    take_screenshot('Windows 10 Pro')
  File "D:\computer_vision_scripts\take_screenshot.py", line 16, in take_screenshot
    machine.LockMachine(session, constants.LockType_Shared)
  File "C:\Users\me\AppData\Roaming\Python\Python39\site-packages\win32com\client\__init__.py", line 180, in __getattr__
    raise AttributeError(a)
AttributeError: LockType_Shared

我使用的脚本来自https://floatingoctothorpe.uk/2018/automating-virtualbox-screenshots-with-python.html

当在文件版本中看到时,如下所示:

代码语言:javascript
复制
import win32com.client
from win32com.client import constants

def take_screenshot(vm_name, screenshot_path='screenshot.png'):
    """Create a VM Screenshot for a given VM"""

    vbox = win32com.client.Dispatch("VirtualBox.VirtualBox")
    session = win32com.client.Dispatch("VirtualBox.Session")

    machine = vbox.FindMachine(vm_name)

    machine.LockMachine(session, constants.LockType_Shared)

    display = session.Console.Display
    width, height, _, _, _, _ = display.GetScreenResolution(0)
    screenshot = display.TakeScreenShotToArray(0, width, height,
                                               constants.BitmapFormat_PNG)

    session.UnlockMachine()

    with open(screenshot_path, 'wb') as output_png:
        output_png.write(screenshot.tobytes())

if __name__ == '__main__':
    take_screenshot('Windows 10 Pro')

有人知道我该怎么做才能让它发挥作用吗?

EN

回答 1

Stack Overflow用户

发布于 2022-03-16 23:07:37

我也面临着同样的问题。就这样解决了:

  1. 添加了以下内容:

import virtualbox

from virtualbox import library

  1. Change

machine.LockMachine(session, constants.LockType_Shared)

通过

machine.LockMachine(session, virtualbox.library.LockType.shared)

screenshot = display.TakeScreenShotToArray(0, width, height,constants.BitmapFormat_PNG)

通过

screenshot = display.TakeScreenShotToArray(0, width, height, virtualbox.library.BitmapFormat.png)

在这里找到了这个解决方案:https://github.com/sethmlarson/virtualbox-python/blob/master/tests/test_test_vm.py

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

https://stackoverflow.com/questions/68288961

复制
相关文章

相似问题

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