明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10833|回复: 20

[【高飞鸟】] 【飞鸟集】WINDOWS API 编程的另一种方式实现 (高级应用见12楼)

  [复制链接]
发表于 2010-12-16 00:17 | 显示全部楼层 |阅读模式
windows API 编程 在lisp中的实现,aroom和nonsmall做了很多工作,我这里提供另外一种思路:
利用excel.vba的实现,比较完美,实现过程中没有出现什么对话框,可以得到返回值。
主干部分还是比较简单。呵呵。
大家不防讨论一下。

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

  1. (defun c:API (/ wsh oEx oBk Mod str)
  2.   (setq wsh (vlax-create-object "wscript.Shell"))
  3.   (vlax-invoke wsh 'RegWrite "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security\\AccessVBOM" 1 "REG_DWORD")
  4.   (vlax-invoke wsh 'RegWrite "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\12.0\\Excel\\Security\\AccessVBOM" 1 "REG_DWORD")
  5.   (vlax-invoke wsh 'RegWrite "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\Excel\\Security\\AccessVBOM" 1 "REG_DWORD")
  6.   
  7.   (setq oEx (vlax-create-object "excel.application"))
  8.   (setq obk (vlax-invoke (vlax-get oEx 'workbooks) 'add))
  9.   (setq mod (vlax-invoke (vlax-get (vlax-get obk 'VBProject) 'VBComponents) 'add 1))
  10.   (setq str
  11. "Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
  12. Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
  13. 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
  14. Sub MyMacro(x as Long, y as Long)
  15. SetCursorPos x, y
  16. Ellipse GetDC(0),0,0,x,y
  17. End Sub"
  18.   )
  19.   (vlax-invoke (vlax-get mod 'CodeModule) 'AddFromString str)
  20.   (vlax-invoke oEx 'run "MyMacro" 800 600)
  21.   (vlax-put oEx 'DisplayAlerts 0)
  22.   (vlax-invoke obk 'close)
  23.   (vlax-invoke oEx 'quit)
  24.   (vlax-release-object mod)
  25.   (vlax-release-object obk)
  26.   (vlax-release-object oEx)
  27.   (vlax-release-object wsh)
  28.   (princ)
  29. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2010-12-16 12:28 | 显示全部楼层
高手,佩服。。敬礼了。
发表于 2010-12-16 14:05 | 显示全部楼层
哈哈……画到视口外面去了!厉害!不知有什么用途?
 楼主| 发表于 2010-12-16 14:25 | 显示全部楼层
本帖最后由 highflybird 于 2010-12-16 14:27 编辑
xhq1954425 发表于 2010-12-16 14:05
哈哈……画到视口外面去了!厉害!不知有什么用途?

呵呵,如果能利用api的话,将极大地扩展lisp的编程能力,因为它已经是触及到windows底层。
譬如可以利用它来进行多线程编程,等等。
下面我上传一个windowsAPI编程帮助,从中可以看到,它几乎有点无所不能。

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

本帖子中包含更多资源

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

x

点评

下载不了了 咋么回事  发表于 2012-6-25 08:34
发表于 2010-12-16 15:41 | 显示全部楼层
就怕启动Excel会慢。
发表于 2010-12-16 17:43 | 显示全部楼层
要是这样用api很别扭,把lisp当做绘图工具还是不错的。
发表于 2010-12-16 18:18 | 显示全部楼层
mark

混合开发的路没有尽头
发表于 2010-12-17 13:54 | 显示全部楼层
绿色版的EXCEL,无效
发表于 2010-12-17 19:48 | 显示全部楼层
开一个autocad就好,再调用excel,效率很低,运算多的程序运行会很慢
发表于 2010-12-22 20:49 | 显示全部楼层
不愧为高手!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 04:51 , Processed in 0.366146 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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