yarsye 发表于 2010-12-20 17:20:56

(已解决)如何查看自带函数是如何编写的?

本帖最后由 yarsye 于 2010-12-23 10:30 编辑

像msgbox、fileselectfolder函数 ,如何知道这些是怎么写的?完全不知道是include在哪个au3里面!

yhxhappy 发表于 2010-12-20 18:21:21

我觉得只要是脚本开头不需要 include <*.au3> 的都是看不着的

tryhi 发表于 2010-12-20 18:36:46

这些都不是用AU3写的

_ddqs. 发表于 2010-12-20 18:59:46

内置函数
可能本身(解析器)不需要编写
只把函数动作转给具有该功能的DLL去执行,然后取返回状态再处理
!
查看写法就要去查看执行该函数的DLL的源码
!

yarsye 发表于 2010-12-21 09:11:46

那怎么能知道 像fileopendialog这种是调用哪个DLL文件的呢?

ahphsautoit 发表于 2010-12-22 08:37:27

貌似我们都是用AU3来搭积木的,具体积木是怎么做出来的,有点高难了!

yarsye 发表于 2010-12-22 11:17:16

只想知道 人家是怎么定义 fileopendialog之类的 函数

_ddqs. 发表于 2010-12-22 12:02:19

;帮助 MsgBox 例子

MsgBox(0, "若干标题", "若干文本")




_MsgBox(0, "若干标题", "若干文本")

Func _MsgBox($0, $1, $2)

        $dll = DllOpen("user32.dll")
        $result = DllCall($dll, "int", "MessageBox", "hwnd", 0, "str", String($2), "str", String($1), "int", 0)
        DllClose($dll)

EndFunc   ;==>_MsgBox

yarsye 发表于 2010-12-22 12:08:15

回复 8# _ddqs.


   我的意思是 如果fileopendialog也能看到是如何调用DLL的 那改写DLL 是否能实现文件夹多选功能?

tryhi 发表于 2010-12-22 12:42:12

回复_ddqs.


   我的意思是 如果fileopendialog也能看到是如何调用DLL的 那改写DLL 是否能实现文件夹 ...
yarsye 发表于 2010-12-22 12:08 http://www.autoitx.com/images/common/back.gif
那些应该是编译器本身执行的动作,还有DLL能改写么?DLL貌似没开源吧

yarsye 发表于 2010-12-22 13:26:26

回复 10# tryhi


    如果知道了调用哪个DLL ,我们自己可以调用DLL然后写些不一样的东西出来啊

例如:
func myfileopendialog();=fileopendialog + 另外一些功能
dllcall(xxxx)
xxxx
xxx
endfunc

pusofalse 发表于 2010-12-22 13:35:58

FileOpenDialog原型GetOpenFileName - http://msdn.microsoft.com/en-us/library/ms646927(v=VS.85).aspx

yarsye 发表于 2010-12-22 14:17:26

回复 12# pusofalse


    老大你真牛!你是如何知道他的原型的?我怎么样才能知道其他函数的原型呢?到哪能查到吗?

pusofalse 发表于 2010-12-22 15:24:37

回复 13# yarsye


    没事时去逛一下MSDN技术资源库,看得多了,积累一些经验。几乎AutoIt中所有的内置函数,都可以在MSDN上找到其原型API。例如内置函数MsgBox是调用User32.dll中的MessageBoxW函数,RegRead调用了AdvApi32.dll中的RegQueryValueExW,FileCopy调用了Kernel32中的CopyFileW等等。
AutoIt的作者为了让使用AutoIt的人更加快速地入门,或为了一些其他目的,多少会舍弃掉一些API的功能,例如内置函数ProcessClose实际是调用了Kernel32.dll中的TerminateProcess函数,TerminateProcess一共有2个参数,一个是进程Pid(实际是进程的句柄),一个是进程的退出代码ExitCode,而作者将其封装成ProcessClose之后,却丢弃了ExitCode参数,所以用ProcessClose结束的进程,它的退出代码总是0,这样做带来的后果就是不能区分进程到底是执行成功还是执行失败。要实现一些更加强大的功能,不得不自己调用一些稍底层的系统函数,但这样做又显示不出AutoIt的易学。

用AutoIt工具箱里的Dependency Walker工具可以查看Dll中的系统函数,找到需要的函数之后就到MSDN或Google搜索它的调用方法吧。

yarsye 发表于 2010-12-22 17:25:00

非常感谢!!!
页: [1] 2
查看完整版本: (已解决)如何查看自带函数是如何编写的?