通过OLE搭建开发环境

从丝路离职到现在,一直懒于更新博客,托各位的福,技术上却是积累了不少。今天说一说OLE这个东西,这是基于微软COM(组件对象模型Componet Object Module),挺老的东西了。我这里展示一下利用它搭建Maxscriptphotoshopjavascript开发环境,还有使用比较多的就是socket了,之后我会分享python写的SendCommandToMaya

 

13dsmax平台

A、首先需要开启max本身的ole,默认是不激活的,这样才能允许外部发送命令,其实就是在注册表里注册一下。

-- add reg file make 3dsmax as server
(
local version,outstr,executablePath,regPath
version = (maxversion())[1] /1000

outstr = createFile "$scripts/register_mxscom.reg"
format "Windows Registry Editor Version 5.00\n\n" to: outstr
format "[HKEY_CLASSES_ROOT\\MAX.Application]\n" to: outstr
format "@=\"OLE Automation MAX Application\"\n\n" to: outstr

format "[HKEY_CLASSES_ROOT\\MAX.Application\\Clsid]\n" to: outstr
format "@=\"{7FA22CB1-D26F-11d0-B260-00A0240CEEA3}\"\n\n" to: outstr

format "[HKEY_CLASSES_ROOT\\MAX.Application\\CurVer]\n" version to: outstr
format "@=\"MAX.Application.%\"\n\n" version to: outstr


format "HKEY_CLASSES_ROOT\\CLSID\\{7FA22CB1-D26F-11d0-B260-00A0240CEEA3} = OLE Automation MAX %.0 Application\n" version to: outstr
format "HKEY_CLASSES_ROOT\\CLSID\{7FA22CB1-D26F-11d0-B260-00A0240CEEA3}\\ProgID = MAX.Application.%\n" version to: outstr
format "HKEY_CLASSES_ROOT\\CLSID\\{7FA22CB1-D26F-11d0-B260-00A0240CEEA3}\\VersionIndependentProgID = MAX.Application\n" to: outstr
executablePath =(getdir #maxroot) +"3dsmax.exe"
format "HKEY_CLASSES_ROOT\CLSID\{7FA22CB1-D26F-11d0-B260-00A0240CEEA3}\\LocalServer32 = %\n" executablePath to: outstr

flush outstr
close outstr

regPath ="/S \""+ (getdir #maxroot) +"scripts\\register_mxscom.reg\""


shellLaunch "Regedit" regPath


-- registerOLEInterface #(Filein, Execute)

)

-- MaxApp = createOLEObject "MAX.Application"
-- MaxApp.Execute "box()"

B、注册ole允许对外接口,也就是注册特定的外部可以使用的maxscript,这一个脚本,就直接放置在maxStartup文件夹里,这样就可以每次打开max都加载。

registerOLEInterface #(Execute, FileIn)

C、通过vbsole发送命令给maxjavascript也可以,因为windows本身提供vbs的解释器,可以直接运行,这里封装一个communicateToMax.vbs,允许带入两个参数执行,第一个参数是数字,1表示执行脚本,第二个参数直接输入脚本字符,2表示执行脚本文件,第二个参数输入脚本文件路径。

Function communicateToMax (state, str)
Set MaxApp = CreateObject("Max.Application")
	Select Case state
		Case 1 MaxApp.Execute(str)
		Case 2 MaxApp.FileIn(str)
	End Select
End Function

REM communicateToMax 1, "box()"
REM communicateToMax 2, "C:\\Users\\pengyancai\\Desktop\\Lis.ms"

Set objArgs = WScript.Arguments
If objArgs.count <> 0 Then
	Select Case objArgs(0)
		Case 1 communicateToMax 1, objArgs(1)
		Case 2 communicateToMax 2, objArgs(1)
	End Select
Else
	MsgBox "Make Methods:" & chr(10) &"communicateToMax.vbs 1 "&Chr(34)&"box()"&Chr(34)& chr(10) & "communicateToMax.vbs 1 "&Chr(34)&"C:\test.ms"&Chr(34)
End If

D、使用notepad++NppExec插件,搭建环境。

执行脚本文件:

npp_save

CSCRIPT.EXEG:\3DSMAX\OLE\communicateToMax.vbs 2 "$(FULL_CURRENT_PATH)"


执行选择的maxscript代码:

set TMPFILE=$(SYS.TEMP)\temp.ms

SEL_SAVETO $(TMPFILE)

CSCRIPT.EXEG:\3DSMAX\OLE\communicateToMax.vbs 2 $(TMPFILE)


源文件下载地址:http://u.163.com/SEG2RqjC  提取码: tbEbfXsc


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值