本帖最后由 caoyin 于 2011-10-19 01:50 编辑
转贴:去除 AutoCAD 教育版打印戳记
大家知道讲文件另存为dxf格式可以去除教育版打印戳记,现有一个很好的软件可以更方便的实现打印戳记的添加跟去除,现跟大家分享。
--------------------------------------------------------------------------------------------------------------------------------
原帖位置找不到了,此程序及文章为转贴!!
程序及文章来源 http://bbs.roomage.com
去除 AutoCAD 教育版打印戳记 - [软件调试]
一年前从他人那里拷贝了一份图纸电子档,是DWG格式(AutoCAD文件),文件打开时提示“检测到教育版打印戳记”,没有理会,只是打印时会在图纸四周印上“由AUTODESK教育版产品制作”的戳记,不能通过设置来取消,但感觉没多大影响。
网上提供了几种方法去除该戳记,核心思想是格式转换,如转换成外部交换文件后再转回,或者转换成低版本的文件(如R14)再转回。
今日虽然比较忙,但仍乘着休息时间分析了一下。AutoCAD 2008通过“acdb17.dll”的输出函数“AcDbDatabase: isEMR”来判断是否存在教育版打印戳记,该函数代码如下:
62076CB0 > 8B41 04 mov eax, [ecx+4] 62076CB3 33C9 xor ecx, ecx 62076CB5 3988 24080000 cmp [eax+824], ecx 62076CBB 0F95C1 setne cl 62076CBE 8AC1 mov al, cl 62076CC0 C3 retn
即[eax+824]处的值,“1”为存在教育版戳记,“0”则不存在该戳记。暂没分析出如何直接从“DWG”文件取得该戳记,只对DLL文件作简单修改便可去除该戳记:
62076CB5 3988 24080000 cmp [eax+824], ecx => 62076CB5 8988 24080000 mov [eax+824], ecx
这时打开含教育版戳记的DWG文件,不会再提示,保存后便可去除该戳记了。
要注意的是,只是这样更改“acdb17.dll”文件是不可行的,自身会调用“isAnObjectDBXModule”来判断:
62035481 . 8B5424 08 mov edx, [esp+8] 62035485 . 52 push edx 62035486 . E8 45000000 call isAnObjectDBXModule 6203548B . 83C4 04 add esp, 4 6203548E . 83F8 01 cmp eax, 1 62035491 . 75 12 jnz short 620354A5
暂没空具体分析,只是作个简单修改:
62035491 . 75 12 jnz short 620354A5 => 62035491 . 90 nop 62035492 . 90 nop
仅修改了三个字节,AutoCAD可以正常运行了,打开带教育版打印戳记的DWG文件再重新保存一下,就成功去除了该戳记,完事后再还原DLL文件。AutoCAD 2006使用的是“acdb16.dll”,稍有不同,但更改也很容易。
经测试,60Mb左右的“DWG”文件都能顺利去除教育版打印戳记。有机会再做个程序,如果一直改来改去也累。
[2009-05-18] 花了二个晚上,编了个修改“教育版打印戳记”的程序(内存补丁)。 下载地址:本地下载 简要说明:先运行AutoCAD,再运行“EduPlotStamp.exe”,应用所需功能,如选择了“强制去除教育版打印戳记”,此时再打开带该戳记的DWG文件不会有提示了,保存后也会去除该戳记标识。关闭AutoCAD后功能便自动失效。 测试环境:Windows XP SP3;AutoCAD 2006 [2009-05-19] 在AutoCAD 2008中文版下测试成功! |