highflybird 发表于 2010-12-16 00:17:01

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

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

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

xiagood 发表于 2010-12-16 12:28:44

高手,佩服。。敬礼了。

xhq1954425 发表于 2010-12-16 14:05:38

哈哈……画到视口外面去了!厉害!不知有什么用途?

highflybird 发表于 2010-12-16 14:25:16

本帖最后由 highflybird 于 2010-12-16 14:27 编辑

xhq1954425 发表于 2010-12-16 14:05 http://bbs.mjtd.com/static/image/common/back.gif
哈哈……画到视口外面去了!厉害!不知有什么用途?
呵呵,如果能利用api的话,将极大地扩展lisp的编程能力,因为它已经是触及到windows底层。
譬如可以利用它来进行多线程编程,等等。
下面我上传一个windowsAPI编程帮助,从中可以看到,它几乎有点无所不能。

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

mccad 发表于 2010-12-16 15:41:58

就怕启动Excel会慢。

cnks 发表于 2010-12-16 17:43:38

要是这样用api很别扭,把lisp当做绘图工具还是不错的。

nonsmall 发表于 2010-12-16 18:18:37

mark

混合开发的路没有尽头

它山之石 发表于 2010-12-17 13:54:59

绿色版的EXCEL,无效

caiqs 发表于 2010-12-17 19:48:03

开一个autocad就好,再调用excel,效率很低,运算多的程序运行会很慢

liu_kunlun 发表于 2010-12-22 20:49:45

不愧为高手!
页: [1] 2 3
查看完整版本: 【飞鸟集】WINDOWS API 编程的另一种方式实现 (高级应用见12楼)