找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 9573|回复: 25

[飞鸟集] WINDOWS API 编程的另一种方式实现

[复制链接]

已领礼包: 8121个

财富等级: 富甲天下

发表于 2013-5-7 21:24:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 Highflybird 于 2013-5-7 21:24 编辑

windows API 编程 在lisp中的实现,aroom和nonsmall做了很多工作,我这里提供另外一种思路:
利用excel.vba的实现,比较完美,实现过程中没有出现什么对话框,可以得到返回值。
主干部分还是比较简单。呵呵。
大家不防讨论一下。

Untitled.gif

下面实现了在背景中画一个白色椭圆(以为不能恢复的,不要惊慌,刷新一下屏幕一下就可以了)


[pcode=lisp,true]
(defun c:API (/ wsh oEx oBk Mod str)
  (setq wsh (vlax-create-object "wscript.Shell"))
  (vlax-invoke wsh 'RegWrite "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security\\AccessVBOM" 1 "REG_DWORD")
  (vlax-invoke wsh 'RegWrite "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\12.0\\Excel\\Security\\AccessVBOM" 1 "REG_DWORD")
  (vlax-invoke wsh 'RegWrite "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\Excel\\Security\\AccessVBOM" 1 "REG_DWORD")

  (setq oEx (vlax-create-object "excel.application"))
  (setq obk (vlax-invoke (vlax-get oEx 'workbooks) 'add))
  (setq mod (vlax-invoke (vlax-get (vlax-get obk 'VBProject) 'VBComponents) 'add 1))
  (setq str
"Private Declare Function SetCursorPos Lib \"user32\" (ByVal x As Long, ByVal y As Long) As Long
Declare Function GetDC Lib \"user32\" Alias \"GetDC\" (ByVal hwnd As Long) As Long
Declare Function Ellipse Lib \"gdi32\" Alias \"Ellipse\" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Sub MyMacro(x as Long, y as Long)
SetCursorPos x, y
Ellipse GetDC(0),0,0,x,y
End Sub"
  )
  (vlax-invoke (vlax-get mod 'CodeModule) 'AddFromString str)
  (vlax-invoke oEx 'run "MyMacro" 800 600)
  (vlax-put oEx 'DisplayAlerts 0)
  (vlax-invoke obk 'close)
  (vlax-invoke oEx 'quit)
  (vlax-release-object mod)
  (vlax-release-object obk)
  (vlax-release-object oEx)
  (vlax-release-object wsh)
  (princ)
)
[/pcode]

裁剪_2.jpg


评分

参与人数 2D豆 +10 收起 理由
WhoCanSay + 5 很给力!经验;技术要点;资料分享奖!
wujimmy + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

本帖被以下淘专辑推荐:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2013-5-7 21:25:29 | 显示全部楼层
呵呵,如果能利用api的话,将极大地扩展lisp的编程能力,因为它已经是触及到windows底层。
譬如可以利用它来进行多线程编程,等等。
下面我上传一个windowsAPI编程帮助,从中可以看到,它几乎有点无所不能。

这种实现的方式有个缺点,就是要利用excel,万一别人没装的话,就可能用不了
好处就是据说excel的vb比vb还要vb。

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:419543windowsAPI32.rar 
下载次数:184  文件大小:344.32 KB 
下载权限: 不限 以上  [免费赚D豆]



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2013-5-7 21:27:52 | 显示全部楼层
本帖最后由 Highflybird 于 2013-5-7 21:29 编辑

这个是vba文件,大家不妨加载运行看看,欢迎建议和错误报告!
程序思路就是利用
1) api 的图像处理函数,GetDC, SetDIBits,ReleaseDC 等

2) api 的文件处理函数 ,GetOpenFileName , GetWindowLong 等

3)利用 vba 自身的对话框 和 image控件,用来显示和装载图片。

4)这样在内存中得到了图像的数据,然后把数据的每个像素点描绘到CAD中。

5)对CAD的每个像素,设置真彩色和位置。这样,一副图片就完成了。

利用这个程序,可以进行简单的图像处理功能,譬如:马赛克,增噪,反色,拉伸,旋转,改变分辨率,等等。

可见,如果能好好利用VBA ,LISP, 脚本技术,WMI,和API,你完全可以达到和arx一样的效果。而且没有版本的限制。

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:readimg.rar 
下载次数:123  文件大小:150.02 KB 
下载权限: 不限 以上  [免费赚D豆]



这几天已经发展能用API技术在CAD编写像C++那样的对话框,远比vba的对话框和DCL丰富,以及对图像文件的处理。把图片文件画到图形中去(不是插入哦)。
发现了综合运用脚本,vba,和api以及lisp的妙处。

Clip (1).png


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-7 22:07:41 | 显示全部楼层
高山仰止,景行行止。虽不能至,然心向往之。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-8 00:43:29 | 显示全部楼层
叹为观止!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-5 12:10:36 | 显示全部楼层
叹为观止!
- 本文出自晓东CAD家园-论坛,原文地址:http://bbs.xdcad.net/thread-667889-1-1.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3919个

财富等级: 富可敌国

发表于 2013-6-5 19:00:39 | 显示全部楼层
实在是高!

点评

有种仰望星空的感觉  详情 回复 发表于 2013-6-5 22:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

发表于 2013-6-5 22:42:33 | 显示全部楼层

有种仰望星空的感觉
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

发表于 2013-6-5 22:43:22 | 显示全部楼层
有种仰望星空的感觉
:lol:lol:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-6-25 11:47:47 | 显示全部楼层
跟CAD没啥关系了吧!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 918个

财富等级: 财运亨通

发表于 2013-7-15 18:52:34 | 显示全部楼层
曲高和寡啊,越来越不懂了。高版可以去从事cad软件开发了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2013-8-1 11:04:50 | 显示全部楼层
厉害的。学习学习在学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-5 22:05:19 | 显示全部楼层
很厉害啊,佩服
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 221个

财富等级: 日进斗金

发表于 2013-8-8 07:19:06 | 显示全部楼层
高手来的,支持
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-2-26 14:21:24 | 显示全部楼层
叹为观止!支持;P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-22 20:38 , Processed in 0.440858 second(s), 67 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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