使用vboxapi开发截图小工具

 开始的时候由于没有搭建好环境,一直报错。

vboxapi官方是全英文文档有点看不懂。研究了一天终于研究出来了。

 官方sdk地址http://download.virtualbox.org/virtualbox/SDKRef.pdf

 vboxapi 这个库可以用pip install vboxapi 进行安装。

如果要对虚拟机进行管理则比较麻烦。需要先建立一个session,然后锁住这个线程。

这块我可能是还没有搞明白。不过截图搞明白了。

import vboxapi 
from PIL import Image
import io

# 创建VirtualBoxManager对象
vbox_manager = vboxapi.VirtualBoxManager(None, None)

# 获取VirtualBox对象
virtualbox = vbox_manager.getVirtualBox()

# 根据虚拟机名称查找虚拟机对象
machine_name = "monterey"
machine = virtualbox.findMachine(machine_name)

# 获取当前虚拟机的会话对象
session = vbox_manager.getSessionObject()

    #   'LockType_Shared': 1,
    #     'LockType_Write': 2,
machine_lock = machine.lockMachine(session, 1)
display = console.display
screenshot_path = "screenshot.png"
#   'BitmapFormat': {
#             'Opaque': 0,
#             'BGR': 0x20524742,
#             'BGR0': 0x30524742,
#             'BGRA': 0x41524742,
#             'RGBA': 0x41424752,
#             'PNG': 0x20474E50,
#             'JPEG': 0x4745504A,
#         },
png_data = display.takeScreenShotToArray(0,800, 600, 0x41424752)
# 调用 takeScreenShotToArray 获取屏幕截图的字节数组 data

# 将字节数组转换为 PIL Image 对象
img = Image.frombytes('RGBA', (800, 600), bytes(png_data))

# 保存为 PNG 格式的文件
with open('screenshot.png', 'wb') as f:
    img.save(f, format='PNG')
# 关闭虚拟机会话
session.unlockMachine()

为什么开发这个截图功能?

官方的vboxmanger是可以截图,但是会增加i/o的输入输出。这个可以直接把截图保存在变量里面。不需要i/o读写。方便我做网页管理器。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值