编辑:这一部分已经解决了,但是另一个问题请看下面的第二篇文章。
(这里有一个小背景,直接跳到tldr:)
我目前正在尝试为Blender编写一些脚本,以帮助改进我所玩游戏(自然选择2)的级别创建工作流。目前,要将几何体从级别编辑器移动到Blender,我必须1)将编辑器中的文件保存为.obj 2)将obj导入Blender,并进行更改。然后,我3)使用我编写的导出器脚本导出到游戏的级别格式,4)在编辑器的新实例中重新打开文件。5)从新实例复制级别数据。6)粘贴到主级文件中。这是一件很痛苦的事情,很明显,除了主要的编辑工作之外,它甚至不鼓励使用这个工具。我对改进工作流程的想法是:1)在编辑器中将数据复制到剪贴板2)在Blender中运行导入程序脚本以加载数据。3)在Blender中运行Exporter脚本保存数据。4)粘贴回原始文件。这不仅省去了冗长过程中的两个完整步骤,还消除了在我的桌面上堆满额外文件的需要。不过,目前我还没有找到一种方法来读取剪贴板数据从Windows剪贴板到搅拌机…至少在不经历一些非常复杂的安装步骤的情况下(例如安装Python3.1、安装Pywin32、将X、Y、Z移到Blender目录、卸载Python3.1……等等)
TLDR
我需要帮助找到一种方法来写/读二进制数据到/从剪贴板在搅拌机。我不关心跨平台的能力——游戏工具只是windows。
理想情况下——虽然显然乞丐在这里不能挑三拣四——但解决方案不会使为外行安装脚本变得太困难。我(希望)不是唯一一个使用它的人,所以我希望安装说明尽可能简单。如果python标准库中有一个可用的解决方案,那就太棒了!
我已经看过/正在看的东西
Pyperclip—纯文本。我需要能够读取剪贴板上的二进制数据。
Pywin32——不断出现缺少dll文件的错误,所以我确信我做错了什么。需要再尝试一次,但我必须采取的步骤相当复杂(见TLDR上最后一句:)
Tkinter——并没有读得太深入,因为它似乎只读纯文本。
cTypes——实际上是在写这篇文章的过程中发现的。看起来很吓人,但我会试试的。
最佳答案
好吧,我终于开始工作了。以下是那些感兴趣的人的代码:
from ctypes import *
from binascii import hexlify
kernel32 = windll.kernel32
user32 = windll.user32
user32.OpenClipboard(0)
CF_SPARK = user32.RegisterClipboardFormatW("application/spark editor")
if user32.IsClipboardFormatAvailable(CF_SPARK):
data = user32.GetClipboardData(CF_SPARK)
size = kernel32.GlobalSize(data)
data_locked = kernel32.GlobalLock(data)
text = string_at(data_locked,size)
kernel32.GlobalUnlock(data)
else:
print('No spark data in clipboard!')
user32.CloseClipboard()