(已解决)如何查看自带函数是如何编写的?
本帖最后由 yarsye 于 2010-12-23 10:30 编辑像msgbox、fileselectfolder函数 ,如何知道这些是怎么写的?完全不知道是include在哪个au3里面! 我觉得只要是脚本开头不需要 include <*.au3> 的都是看不着的 这些都不是用AU3写的 内置函数
可能本身(解析器)不需要编写
只把函数动作转给具有该功能的DLL去执行,然后取返回状态再处理
!
查看写法就要去查看执行该函数的DLL的源码
! 那怎么能知道 像fileopendialog这种是调用哪个DLL文件的呢? 貌似我们都是用AU3来搭积木的,具体积木是怎么做出来的,有点高难了! 只想知道 人家是怎么定义 fileopendialog之类的 函数 ;帮助 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
回复 8# _ddqs.
我的意思是 如果fileopendialog也能看到是如何调用DLL的 那改写DLL 是否能实现文件夹多选功能? 回复_ddqs.
我的意思是 如果fileopendialog也能看到是如何调用DLL的 那改写DLL 是否能实现文件夹 ...
yarsye 发表于 2010-12-22 12:08 http://www.autoitx.com/images/common/back.gif
那些应该是编译器本身执行的动作,还有DLL能改写么?DLL貌似没开源吧 回复 10# tryhi
如果知道了调用哪个DLL ,我们自己可以调用DLL然后写些不一样的东西出来啊
例如:
func myfileopendialog();=fileopendialog + 另外一些功能
dllcall(xxxx)
xxxx
xxx
endfunc FileOpenDialog原型GetOpenFileName - http://msdn.microsoft.com/en-us/library/ms646927(v=VS.85).aspx 回复 12# pusofalse
老大你真牛!你是如何知道他的原型的?我怎么样才能知道其他函数的原型呢?到哪能查到吗? 回复 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搜索它的调用方法吧。 非常感谢!!!
页:
[1]
2