明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4816|回复: 10

[已解答] 请问能将cad窗口设为当前窗口吗

[复制链接]
发表于 2014-7-28 15:41:27 | 显示全部楼层 |阅读模式
由于win7系统原因 cad2006+天正 启动之后cad窗口不会成为当前激活的窗口
需要手动去点一下cad界面或任务栏才能使cad成为当前窗口(XP无此问题)
请问lisp能实现自动激活cad窗口设为当前窗口吗?

另外使用opendcl的窗口被调出以后,opendcl窗口获得焦点,cad窗口被后置了,能实现打开opendcl窗口后自动激活cad为当前窗口吗?
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-7-30 15:50:21 | 显示全部楼层
本帖最后由 print1985 于 2014-7-30 16:26 编辑

用大半天时间学习了高飞鸟大师的神贴 http://bbs.mjtd.com/thread-85724-1-1.html
没想到这么一个简单的功能居然要用到API来解决
解决方法:DynamicWrapperX插件+以下代码 (插件见神贴)
  1. ;置为当前窗口
  2. (defun ForegroundWindow (/ app hwnd  wrap)
  3.   (setq app (vlax-get-acad-object))               ;CAD程序对象
  4.   (setq hwnd (vla-get-hwnd app))                  ;CAD程序句柄
  5.   (setq wrap (vlax-create-object "DynamicWrapperX"))                ;创建DynamicWrapperX对象
  6.   (vlax-invoke wrap 'Register "USER32" "SetForegroundWindow" "i=l" "r=l")  ;注册API函数
  7.   (vlax-invoke wrap 'SetForegroundWindow hwnd)   ;窗口前置
  8.   (vlax-release-object wrap) ;释放
  9.   (princ)
  10. )
 楼主| 发表于 2014-7-30 15:58:47 | 显示全部楼层
API真的很好玩,可以在cad里面直接控制其它应用程序,比如简单的关闭窗口、最大化、最小化
复杂的可以用lisp做木马、病毒了(太可怕了,还好DynamicWrapperX不是系统自带的)
可惜DynamicWrapperX插件不支持64位系统,希望大神能升级下
发表于 2014-7-30 17:53:12 | 显示全部楼层
 楼主| 发表于 2014-7-30 21:23:44 | 显示全部楼层
非常感谢 原来早更新支持64位了 有俄语 应该是俄国人写的吧
我来搬运一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-7-31 00:03:19 来自手机 | 显示全部楼层
兄弟也是神人啊!想研究啥都能研究出来!
api我也看了会,没明白!
 楼主| 发表于 2014-7-31 09:34:10 | 显示全部楼层
wowan1314 发表于 2014-7-31 00:03
兄弟也是神人啊!想研究啥都能研究出来!
api我也看了会,没明白!

我也只懂了点点,API函数和lisp的函数一样,要用哪个函数的时候查一下,API是系统自带的,主流编程软件都可以直接调用,可惜lisp无法直接调用(鄙视桌子),所以用到了DynamicWrapperX插件来间接调用
发表于 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位的时候,好像还是不行
发表于 2015-7-19 00:15:57 | 显示全部楼层
carrot1983 发表于 2015-7-8 16:05
(setq name "C:\\DynWrapX.dll")
      (setq wsh (vlax-Create-Object "wscript.shell"))
      (vlax-i ...

呵呵大蔡 你用的是老版本的"DynamicWrapperX" 用新的就可以了。
发表于 2015-7-19 15:49:31 | 显示全部楼层
wangshang323 发表于 2015-7-19 00:15
呵呵大蔡 你用的是老版本的"DynamicWrapperX" 用新的就可以了。

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

win7  CAD2012  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 11:35 , Processed in 0.216988 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表