print1985 发表于 2014-7-28 15:41:27

请问能将cad窗口设为当前窗口吗

由于win7系统原因 cad2006+天正 启动之后cad窗口不会成为当前激活的窗口
需要手动去点一下cad界面或任务栏才能使cad成为当前窗口(XP无此问题)
请问lisp能实现自动激活cad窗口设为当前窗口吗?

另外使用opendcl的窗口被调出以后,opendcl窗口获得焦点,cad窗口被后置了,能实现打开opendcl窗口后自动激活cad为当前窗口吗?

print1985 发表于 2014-7-30 15:50:21

本帖最后由 print1985 于 2014-7-30 16:26 编辑

用大半天时间学习了高飞鸟大师的神贴 http://bbs.mjtd.com/thread-85724-1-1.html
没想到这么一个简单的功能居然要用到API来解决
解决方法:DynamicWrapperX插件+以下代码 (插件见神贴);置为当前窗口
(defun ForegroundWindow (/ app hwndwrap)
(setq app (vlax-get-acad-object))               ;CAD程序对象
(setq hwnd (vla-get-hwnd app))                  ;CAD程序句柄
(setq wrap (vlax-create-object "DynamicWrapperX"))                ;创建DynamicWrapperX对象
(vlax-invoke wrap 'Register "USER32" "SetForegroundWindow" "i=l" "r=l");注册API函数
(vlax-invoke wrap 'SetForegroundWindow hwnd)   ;窗口前置
(vlax-release-object wrap) ;释放
(princ)
)

print1985 发表于 2014-7-30 15:58:47

API真的很好玩,可以在cad里面直接控制其它应用程序,比如简单的关闭窗口、最大化、最小化
复杂的可以用lisp做木马、病毒了(太可怕了,还好DynamicWrapperX不是系统自带的)
可惜DynamicWrapperX插件不支持64位系统,希望大神能升级下

Andyhon 发表于 2014-7-30 17:53:12

Ref link:
http://yuripopov.ucoz.net/index/dwx_version_history_en/0-23

print1985 发表于 2014-7-30 21:23:44

非常感谢 原来早更新支持64位了 有俄语 应该是俄国人写的吧
我来搬运一下

wowan1314 发表于 2014-7-31 00:03:19

兄弟也是神人啊!想研究啥都能研究出来!
api我也看了会,没明白!

print1985 发表于 2014-7-31 09:34:10

wowan1314 发表于 2014-7-31 00:03 static/image/common/back.gif
兄弟也是神人啊!想研究啥都能研究出来!
api我也看了会,没明白!

我也只懂了点点,API函数和lisp的函数一样,要用哪个函数的时候查一下,API是系统自带的,主流编程软件都可以直接调用,可惜lisp无法直接调用(鄙视桌子),所以用到了DynamicWrapperX插件来间接调用

carrot1983 发表于 2015-7-8 16:05:48

(setq name "C:\\DynWrapX.dll")
      (setq wsh (vlax-Create-Object "wscript.shell"))
      (vlax-invoke wsh 'Run (strcat "RegSvr32.exe " name))
(setq wrap (vlax-create-object "DynamicWrapperX"))

wrap返回的是nil
AutoCAD2012 64位的时候,好像还是不行

wangshang323 发表于 2015-7-19 00:15:57

carrot1983 发表于 2015-7-8 16:05 static/image/common/back.gif
(setq name "C:\\DynWrapX.dll")
      (setq wsh (vlax-Create-Object "wscript.shell"))
      (vlax-i ...

呵呵大蔡 你用的是老版本的"DynamicWrapperX" 用新的就可以了。

carrot1983 发表于 2015-7-19 15:49:31

wangshang323 发表于 2015-7-19 00:15 static/image/common/back.gif
呵呵大蔡 你用的是老版本的"DynamicWrapperX" 用新的就可以了。

呵呵,你是这个号啊。
用的是5#楼的print1985提供的,2.1.0版的。(defun C:TEST ()
(vl-load-com)
(setq NAME (getfiled "选择 dynwrapx.dll" "c:/" "dll" 2))
(setq WSH (vlax-create-object "wscript.shell"))
(vlax-invoke WSH 'RUN (strcat "RegSvr32.exe /s " NAME))
(vlax-release-object WSH)
(setq WRAP (vlax-create-object "DynamicWrapperX"))
(princ WRAP)
(princ)
)
命令: test nil

win7  CAD2012  
页: [1] 2
查看完整版本: 请问能将cad窗口设为当前窗口吗